• 締切済み

ExcelVBAを用いてフォーマットからデータベースに入力する際のハイパーリンクの扱い方

入力フォーマットに入力し、最後に「登録する」のようなボタンをクリックすることで別シート上のデータベースへ入力した情報が蓄積されるという作業をExcelVBAを用いて行っています。そのデータベースに添付ファイルをつけた情報を入れたいのですが、フォーマット上でつけたハイパーリンクがデータベースに入りません。VBA初心者のため、やり方が分からず困っています。よろしくお願いします。

みんなの回答

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.4

rivoisuさんがお忙しそうなので、横入り失礼します。 >ハイパーリンクの表示文字列とアドレスが異なる場合・・・ 多分、セルに表示される文字列の事を言っているものと推測します。 パラメータのTextToDisplayで、ハイパーリンクで表示されるテキストを指定します。 VBEのヘルプで、Hyperlinks.Addメソッドを調べれば分かると思います。

すると、全ての回答が全文表示されます。
  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.3

代入ではhyperlinkはできません。 実験してみれば分かります。 A1にハイパーリンクが設定されているとき range("B1")=range("A1") を実行してみると分かります。 別にHyperlink.addメソッドを実行する必要があるようです。 Sub test() Dim s As Range Set s = Range("A1") ActiveSheet.Hyperlinks.Add Anchor:=s, Address:=s.Value End Sub range型の変数sを宣言します。 targetRange.Offset(0, i).Value = formSheet.Range(dataAddressList(i)).Value の後で Set s = targetRange.Offset(0, i) ActiveSheet.Hyperlinks.Add Anchor:=s, Address:=s.Value としてハイパーリンクを追加してあげなければならないようです。 たぶんすべてのセルにハイパーリンクがあるわけではないでしょうから IF文でハイパーリンクのあるセルかどうかを判断しての処理になると思います。 こういう問題が起きた時どこに問題があるかを考えてみれば 代入時にハイパーリンクが消えているのではないかということは解ると思います。 実際にどうか小さなSUBを作ってみて実験してみる。 ということが解決の早道です。

tar5555
質問者

補足

ご回答ありがとうございました。 おかげさまで目的の動作を実行することができました。 問題解決法のアドバイスまでいただき、初心者の私にはとても勉強になりました。 実行する上でまた疑問が出てきたのですが、ハイパーリンクの表示文字列とアドレスが異なる場合はどのようにすればよいかがわからずに困っています。よろしければご教示願います。

すると、全ての回答が全文表示されます。
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

>フォーマット上でつけたハイパーリンクがデータベースに入りません。 「入りません」とは、どういうことですか? ハイパーリンクされないということですか? 意味が明確に伝わるようにしてください。 ActiveSheet.Hyperlinks.Add Anchor:=○○○, Address:=△△△

tar5555
質問者

補足

返事が遅くなりもうしわけありません。 入力フォーマットに記入した内容をDBに転記するVBAにおいて、入力フォーマットにハイパーリンクを付けた場合に、転記先ではハイパーリンクされなくなってしまい、表示のみになってしまいます。 ハイパーリンクも転記する方法を教えていただければと思います。よろしくお願いします。

すると、全ての回答が全文表示されます。
  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.1

今のコードを見せてくれないとお答えのしようがありません。 いろいろ想像はできますが...

tar5555
質問者

補足

返事が遅くなりもうしわけありません。今のコードは以下です。 入力フォーマットに記入した内容をDBに転記しています。 入力フォーマットにハイパーリンクを付けた場合に、転記先ではハイパーリンクがなくなってしまい、表示のみになってしまいます。 ハイパーリンクも転記する方法を教えていただければと思います。よろしくお願いします。 Sub 新規レコード転記() '変数の宣言 Dim formSheet As Worksheet, dataSheet As Worksheet, targetRange As Range, i As Long Dim dataAddressList(), newRecord As Range, tmpRecord As Range Dim tmpNo As Integer, newNo As Integer '入力用のシートをセット Set formSheet = Sheets("入力フォーム") '蓄積用のシートをセット Set dataSheet = Sheets("DB") '連番取得 tmpNo = Application.WorksheetFunction.Max(dataSheet.Columns(1)) newNo = tmpNo + 1 '登録番号を入力画面に表示 formSheet.Range("C22").Value = newNo '転記したいセルの位置を配列に格納 dataAddressList = Array("C22", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "C10", _ "C12", "C13", "C14", "C16", "C17", "C18", "C19", "C20") '新規レコードの入力位置を取得 Set targetRange = dataSheet.Range("A" & Rows.Count).End(xlUp).Offset(1) '配列に指定した順番でレコードの値を転記 For i = 0 To UBound(dataAddressList) targetRange.Offset(0, i).Value = formSheet.Range(dataAddressList(i)).Value Next '転記したレコードのセル範囲を取得 Set newRecord = dataSheet.Range(targetRange, targetRange.Offset(0, UBound(dataAddressList))) 'その一つ上のレコードのセル範囲を取得 Set tmpRecord = newRecord.Offset(-1, 0) 'ひとつ上のレコードの書式を最新レコードにコピー tmpRecord.Copy newRecord.PasteSpecial xlFormats Application.CutCopyMode = False MsgBox "入力を完了しました。登録IDは" & newNo & "です。" End Sub

すると、全ての回答が全文表示されます。

関連するQ&A