マクロでHTMLタグのクラス名を入れたらエラー

このQ&Aのポイント
  • 下記のプログラムはセルに文字を入れてHTML化するものです。HTMLタグにクラス名を入れると「中断モードでコードを実行することはできません」とエラーメッセージが出ます。
  • クラス名の「""」が問題だと思いますが、どうしたら良いでしょうか?
  • マクロでHTMLタグのクラス名を正しく使う方法について教えてください。
回答を見る
  • ベストアンサー

マクロ HTMLタグのクラス名を入れたらエラー

下記のプログラムはセルに文字を入れてHTML化するものです。 HTMLタグにクラス名を入れると「中断モードでコードを実行することはできません」とエラーメッセージが出ます。 LineData = "<div class=“sample”>” & ws.Cells(i, 1).Value & "</div>" & vbCrLf クラス名の「” ”」が問題だと思いますが、どうしたら良いでしょうか? 宜しくお願いします。 Sub convertHTML()  Dim ws As Worksheet  Dim htmlFile As String  Dim i As Long  Dim LineData As String    Set ws = ThisWorkbook.Worksheets(1)  htmlFile = ActiveWorkbook.Path & "\Sample.html"  Open htmlFile For Output As #1    i = 1  Do While ws.Cells(i, 1).Value <> ""   LineData = "<div id=“sample”>” & ws.Cells(i, 1).Value & "</div>" & vbCrLf   LineData = LineData & "<p>" & ws.Cells(i, 2).Value & "</p>" & vbCrLf   LineData = LineData & "<span>" & ws.Cells(i, 3).Value & "</span>" & vbCrLf   Print #1, LineData   i = i + 1  Loop  Close #1  MsgBox htmlFile & "に書き出しました" End Sub

  • nkmyr
  • お礼率67% (403/600)

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.2

"の中に"がある場合""と連続して LineData = "<div id=""sample"">" & ws.Cells(i, 1).Value & "</div>" & vbCrLf にしてください。

nkmyr
質問者

お礼

コメントありがとうございます。 LineData = LineData & "<tr><td class=“”athlete-rank stat””>” & ws.Cells(i, 1).Value & "</td><td><div class=“”avatar avatar--system””><div class=“”avatar-image””> <img> <span class=“”headshot-image”” style=“”background-image: url(images/.png);””></span> </div>" & vbCrLf これに間違いはないでしょうか? 何故か2回出てしまいます。 スペシャル スペシャル←何故か2回出てしまう スズキ 2000 1000 タナカ 1000 800

その他の回答 (2)

  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.3

LineData = "<div id=""sample"">" & ws.Cells(i, 1).Value & "</div>" & vbCrLf でしたが LineData = LineData & "<tr><td class=“”athlete-rank stat””>” & ws.Cells(i, 1).Value &以下略 LineData & が追加になっていますが必要なのでしょうか?

nkmyr
質問者

お礼

LineData & が余計でしたか。 おかげさまで2回でなくなりました。 ありがとうございました。

回答No.1

んま質問者さんも気が付いている通りですね。 "<div id=“sample”>” これは、 "<div id=“ + sample + ”>” という3ブロックの文字に見えていますので。 エスケープ処理が必要ですね。 https://dobon.net/vb/dotnet/string/doublequotation.html 今回だけは、手抜きして id=sample(ダブルクオート省略)だけでも 手っ取り早いかと。

nkmyr
質問者

お礼

コメントありがとうございます。 LineData = LineData & "<tr><td class=“”athlete-rank stat””>” & ws.Cells(i, 1).Value & "</td><td><div class=“”avatar avatar--system””><div class=“”avatar-image””> <img> <span class=“”headshot-image”” style=“”background-image: url(images/.png);””></span> </div>" & vbCrLf これに間違いはないでしょうか? 何故か2回出てしまいます。 スペシャル スペシャル←何故か2回出てしまう スズキ 2000 1000 タナカ 1000 800

関連するQ&A

  • マクロ ランキングの表を作成し、HTML出力 

    A1、B1、C1…にテキストを入れます。 A1 スペシャル B1 (空白) C1 (空白) A2 スズキ B2 2000 C2 1000 A3 タナカ B3 1000 C3 800  ・  ・ 下記のプログラムはセルに空白があるとそこでループが止まってしまいます。 セルの空白で止まるのではなく、最終尾の行に全て空白があると判断した時点でループをストップしたいのです。 上記ではB1とC1に空白があり、B1で止まってしまいます。 アドバイスをお願いします。 Sub convertHTML()  Dim ws As Worksheet  Dim htmlFile As String  Dim i As Long  Dim LineData As String    Set ws = ThisWorkbook.Worksheets(1)  htmlFile = ActiveWorkbook.Path & "\Sample.html"  Open htmlFile For Output As #1    i = 1  Do While ws.Cells(i, 1).Value <> ""   LineData = "<div>" & ws.Cells(i, 1).Value & "</div>" & vbCrLf   LineData = LineData & "<p>" & ws.Cells(i, 2).Value & "</p>" & vbCrLf   LineData = LineData & "<span>" & ws.Cells(i, 3).Value & "</span>" & vbCrLf   Print #1, LineData   i = i + 1  Loop  Close #1  MsgBox htmlFile & "に書き出しました" End Sub

  • VBA UTF-8形式で保存したい

    http://officetanaka.net/excel/vba/file/file11.htm UTF-8形式で保存する方法を参考サイトを見つけました。 Sub Sample1() Dim Target As String Target = "D:\Work\Sample.txt" With CreateObject("ADODB.Stream") .Charset = "UTF-8" .Open .WriteText "田中", 1 .SaveToFile Target, 2 .Close End With End Sub Target = "D:\Work\Sample.txt" といった書き込みのプログラムがあります。下のプログラムとタブってしまいます。 htmlFile = ActiveWorkbook.Path & "\Sample.html" 保存指定が2つあり、どちらかに記述してもパスが違いますとエラーメッセージがでます。 正しいUTF-8形式で保存する方法を教えて下さい。 Sub convertHTML()  Dim ws As Worksheet  Dim htmlFile As String  Dim i As Long  Dim LineData As String    Set ws = ThisWorkbook.Worksheets(1)  htmlFile = ActiveWorkbook.Path & "\Sample.html"  Open htmlFile For Output As #1    i = 1  Do While Not (ws.Cells(i, 1).Value = "" And ws.Cells(i, 2).Value = "" And ws.Cells(i, 3).Value = "")   LineData = "<div>" & ws.Cells(i, 1).Value & "</div>" & vbCrLf   LineData = LineData & "<p>" & ws.Cells(i, 2).Value & "</p>" & vbCrLf   LineData = LineData & "<span>" & ws.Cells(i, 3).Value & "</span>" & vbCrLf   Print #1, LineData   i = i + 1  Loop  Close #1  MsgBox htmlFile & "に書き出しました" End Sub

  • VBA 特定のシートに同じ処理をさせたい

    下記のプログラムはランキングをHTML化にしたものです。 シート名3つ ・スペシャルクラス ・オープンクラス ・ビギナークラス で入力し、同時に処理したいと考えています。 https://excel-ubara.com/excelvba1r/EXCELVBA520.html 分からないことはHTML名で保存する処理です。 保存するファイル名 Sample.html それを同時に保存する方法を教えてください。 スペシャルクラス.html オープンクラス.html ビギナークラス.html Sub convertHTML() Dim ws As Worksheet Dim i As Long Dim LineData As String Dim Target As String Target = ActiveWorkbook.Path & "\Sample.html" Set ws = ThisWorkbook.Worksheets(1) i = 1 With CreateObject("ADODB.Stream") .Charset = "UTF-8" .Open LineData = "" Do While Not (ws.Cells(i, 1).Value = "" And ws.Cells(i, 2).Value = "" And ws.Cells(i, 3).Value = "") LineData = LineData & "<div>" & ws.Cells(i, 1).Value & "</div>" & vbCrLf LineData = LineData & "<p>" & ws.Cells(i, 2).Value & "</p>" & vbCrLf LineData = LineData & "<span>" & ws.Cells(i, 3).Value & "</span>" & vbCrLf i = i + 1 Loop .WriteText LineData, 1 .SaveToFile Target, 2 .Close End With MsgBox Target & "に書き出しました" End Sub

  • マクロ テーブルタグをリストタグに書き直したい

    下記のVBAコードは表を囲むように選択し、マクロを実行することでテーブルタグのHTML化ができるものです。 表 1 佐藤 東京 2 山田 神奈川 マクロ実行結果 <table>  <tr><td>1</td><td>佐藤</td><td>東京</td></tr>  <tr><td>2</td><td>山田</td><td>神奈川</td></tr> </table> これをリストに書き換えたいです。 <ul> <li>1</li><li>佐藤</li><li>東京</li> </ul> <ul> <li>2</li><li>山田</li><li>神奈川</li> </ul> どうしたら良いでしょうか? 宜しくお願いします。 Sub convertHTML() Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets(1) Dim htmlFile As String htmlFile = ActiveWorkbook.Path & "\table.html" Open htmlFile For Output As #1 Dim i, j As Long i = 1 Print #1, "<table>" Do While ws.Cells(i, 1).Value <> "" Print #1, vbTab & "<tr>"; j = 1 Do While ws.Cells(i, j).Value <> "" Print #1, "<td>" & ws.Cells(i, j).Value & "</td>"; j = j + 1 Loop Print #1, "</tr>" & vbCr; i = i + 1 Loop Print #1, "</table>" Close #1 MsgBox htmlFile & "に書き出しました" End Sub

  • エクセルのマクロで複数セル指定は?

    以前(7月22日 質問No.936181)の質問でご回答を頂いたマクロなんですが、 Private Sub Worksheet_Change(ByVal Target As Range) Dim MyData As String Dim i As Integer Dim ImaNanji As String Dim SakkiNanji As String Dim ImaNanpun As String Dim SakkiNanpun As String SakkiNanpun = Cells(2, 3).Value ImaNanji = Cells(1, 3).Value ImaNanpun = Mid(ImaNanji, Len(ImaNanji) - 4, 2) If ImaNanpun <> SakkiNanpun Then Application.EnableEvents = False For i = 10 To 2 Step -1 MyData = Cells(i - 1, 2).Value Cells(i, 2).Value = MyData Next i MyData = Cells(1, 1).Value Cells(1, 2).Value = MyData Cells(2, 3).Value = ImaNanpun Application.EnableEvents = True End If End Sub A1のデータをB1からB10に一分おきにつぎつぎに書き込むというものなんですが、ひとつのセルではなく複数のセル(例えばA1からA30の30個のセル)をいっぺんに書き込むようにしたいのですが可能でしょうか? よろしくお願いします。

  • エクセル表をHTML化

    高橋太郎 赤 佐藤太郎 白 鈴木太郎 黄 山田太郎 青 Sub convertHTML() Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets(1) Dim htmlFile As String htmlFile = ActiveWorkbook.Path & "\ファイル名.html" Open htmlFile For Output As #1 Dim i, j As Long i = 1 Print #1, "<table>" Do While ws.Cells(i, 1).Value <> "" Print #1, vbTab & "<tr>"; j = 1 Do While ws.Cells(i, j).Value <> "" Print #1, "<td>" & ws.Cells(i, j).Value & "</td>"; j = j + 1 Loop Print #1, "</tr>" & vbCr; i = i + 1 Loop Print #1, "</table>" Close #1 MsgBox htmlFile & "に書き出しました" End Sub 以下が結果です。 <table> <tr><td>高橋太郎</td><td>赤</td></tr> <tr><td>佐藤太郎</td><td>白</td></tr> <tr><td>鈴木太郎</td><td>黄</td></tr> <tr><td>山田太郎</td><td>青</td></tr> </table> 下記のようにするにはどうすればよいでしょうか? <table> <tr><td>赤</td><td>高橋太郎</td></tr> <tr><td>白</td><td>佐藤太郎</td></tr> <tr><td>黄</td><td>鈴木太郎</td></tr> <tr><td>青</td><td>山田太郎</td></tr> </table> セルを書き換えた方が早いですが、名前がバラバラですし、何千行もあり、作業が大変なので、マクロを書き換えた方が早いかと思いましたので。 宜しくお願いします。

  • (VBA)Splitの抜き出しが上手くいかない

    以下のようなコードで「指定区切り文字」の前後で文字列を切り出しています。 添付画像見てもらえれば判ると思いますが B8セルからのB列の値が「29:08」が正解なのに 「29:08:00」と最後に「:00」が付いた形式になっています。 (B13で1時間を過ぎると正常になっています。) このため、以後のE及びF列の書き出しもおかしな値となりました。 どのように修正すれば良いでしょうか ? Option Explicit Sub Chapter_Plus() Dim I As Long Dim J As Long Dim TEMP As Variant Dim SepChr As String Dim WS1 As Worksheet Dim WS2 As Worksheet Dim EndLow As Long Dim LineData As String Dim OutText As String Dim byteData() As Byte '一時格納用 Set WS1 = Worksheets("DATA") Set WS2 = Worksheets("Chapter") 'シートの初期化 WS1.Range("B3:H100").Clear WS2.Range("A1:A100").Clear SepChr = InputBox("指定文字を入力してください。", "区切り文字入力", " ") 'TotalLength = InputBox("時間を(h:mm:ss)で入力してください。", "ファイルサイズ入力") EndLow = WS1.Cells(Rows.Count, "A").End(xlUp).Row With WS1 '区切り文字で切り出す For I = 3 To EndLow TEMP = Split(.Cells(I, "A"), SepChr) .Cells(I, "B") = TEMP(0) .Cells(I, "C") = TEMP(1) Next '仮チャプター書き出す For I = 3 To EndLow .Cells(I, "E").Value = Format(.Cells(I, "B").Value, "hh:mm:ss") .Cells(I, "F").Value = Format(.Cells(I + 1, "B").Value, "hh:mm:ss") .Cells(I, "G").Value = .Cells(I, "C").Value Next '番号 For I = 3 To EndLow .Cells(I, "H").Value = CStr(Format(I - 2, "'00")) Next End With End SUB

  • 抜き出しマクロ(3)

    以下のプログラムは10行ごとにデータを抜き出すプログラムです。 これに追加して、普段は10行に1個データを抜き出し、前回の結果より絶対値が10増減があったとき、 相対値が10%の増減があった時にもデータを抜き出すようにするにはどうすればいいですか? 例えば以下の通り time result 1   1 2   1 3   1 4   1 5   1 6   1 7   1 8   1 9   1 10   1 11  100 12  500 13  1000 14  1000 15  1000 16  1000 17  1000 18  1000 19  1000 20  1000 21  1000 ・  ・ ・  ・ ・  ・  ↓ time result 1   1 10  1 11  100 12  500 13  1000 20  1000 ・  ・ ・  ・ ・  ・ ここからプログラム(10行ごとに抜き出す) ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ Sub nukitori() Dim X As Worksheet Dim i As Long Dim ii As Long Dim col As Integer Dim Nukitori_Step As Long Nukitori_Step = 10 i = 2 ii = 2 '●●●見出し行が1行目なので2で始める Set X = ActiveSheet '●シートShordataがあったら削除 On Error Resume Next Application.DisplayAlerts = False Worksheets("shortdata").Delete Application.DisplayAlerts = True On Error GoTo 0 Worksheets.Add.Name = "shortdata" '●先ず、見出しをコピー Worksheets("shortdata").Rows(1).Value = X.Rows(1).Value While X.Cells(i, 1) <> "" And i < 65535 For col = 1 To 255 Worksheets("shortdata").Cells(ii, col).Value = X.Cells(i, col).Value Next If i = 2 Then i = 1 i = i + Nukitori_Step ii = ii + 1 Wend End Sub ここからプログラム(10行ごとに抜き出す+増減があった場合も抜き出す) ただし以下の箇所でエラーが起こる If i > 3 And Abs(Cells(i, 1) - Cells(i - 1)) >= 10 Then 中断モードでコードを実行することができませんと。 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ Sub 抽出() Dim i As Long Dim j As Long Dim ws1 As Worksheet Dim ws2 As Worksheet Dim Lastline As Long Dim SelFlg As Boolean '抽出データかどうかの Set ws1 = Worksheets("OriginDT") '元データ Set ws2 = Worksheets("SelectDT") '抽出データ Lastline = ws1.Cells(Rows.Count, 1).End(xlUp).Row '最終行番号を取得 ws2.Cells(1, 1) = ws1.Cells(1, 1) '見出し部分のコピー ws2.Cells(1, 2) = ws1.Cells(1, 2) j = 1 For i = 2 To Lastline SelFlg = False '10で割ったあまりが1(つまり10行おき)または最初のデータのとき If i Mod 10 = 1 Or i = 2 Then ' SelFlg = True '抽出対象にする End If '2行目以降で一つ上の行との差が10以上のとき If i > 3 And Abs(Cells(i, 1) - Cells(i - 1)) >= 10 Then SelFlg = True '抽出対象にする End If If SelFlg = True Then '抽出対象だったらコピー j = j + 1 ws2.Cells(j, 1) = ws1.Cells(i, 1) ws2.Cells(j, 2) = ws1.Cells(i, 2) End If Next End Sub

  • マクロが動作しない

    Office2003にバージョンアップすると動作しないマクロが出ました。ちゃんと動作するものもあります。 内容は変更していないので内容はあってるはずですが 念のためコピーします。 Sub 電装品() Dim Gyou As Integer Dim Gyouz As Integer Dim State As Integer Dim Statez As Integer Dim CelValue As String Dim CelValuez As String Dim CopyCelNo As String Dim CopyCelNoz As String Dim WS1 As Object Dim WS2 As Object Set WS1 = Worksheets("購入品リスト") Set WS2 = Worksheets("電装品リスト") WS2.Range("A:G").Delete Shift:=xlToLeft WS2.Range("B1") = "電 装 品 リ ス ト" With WS2.Range("B1") .Font.Bold = True .Font.Italic = True .Font.Size = 24 End With WS2.Range("D1") = "作成日:" & Date WS1.Range("C3:E3").Copy (WS2.Range("A2:C2")) State = 3 For Gyou = 1 To 2000 CopyCelNo = "A" & State CelValue = WS1.Cells(Gyou, 17).Value If CelValue = "1" Then WS1.Range(WS1.Cells(Gyou, 3), WS1.Cells(Gyou, 5)).Copy (WS2.Range (CopyCelNo)) State = State + 1 End If Next WS1.Range("G3:J3").Copy (WS2.Range("D2:G2")) Statez = 3 For Gyouz = 1 To 2000 CopyCelNoz = "D" & Statez CelValuez = WS1.Cells(Gyouz, 18).Value If CelValuez = "1" Then WS1.Range(WS1.Cells(Gyouz, 7), WS1.Cells(Gyouz, 10)).Copy (WS2.Range (CopyCelNoz)) Statez = Statez + 1 End If Next End Sub

  • エクセル マクロの設定方法について

    差込印刷でSheet1に作成した名簿データにより、sheet2に作成しているデータへ差込印刷をしています。現在、次のようなマクロを組んで名簿の件数に合わせて、For = 2 To 500 Step 8を修正しながら、印刷しています。できたら、名簿の件数の増減に関係なく印刷できるようになればと考えています。始めたばかりのマクロ初心者です。よろしくご教授ください。お願いします。 Dim i As Long Dim ws1 As Worksheet, ws2 As Worksheet Set ws1 = sheets(″sheet1″) Set ws2 = sheets(″sheet2″) For i = 2 To 500 Step 8 ws2 .Range(″A1″).Value = ws1.Cells(i+1,2).Value ws2 .Range(″A7″).Value = ws1.Cells(i+2,2).Value ws2 .Range(″A13″).Value = ws1.Cells(i+3,2).Value ws2 .Range(″A19″).Value = ws1.Cells(i+4,2).Value ws2 .Range(″F1″).Value = ws1.Cells(i+5,2).Value ws2 .Range(″F7″).Value = ws1.Cells(i+6,2).Value ws2 .Range(″F13″).Value = ws1.Cells(i+7,2).Value ws2 .Range(″F19″).Value = ws1.Cells(i+8,2).Value DoEvents ws2.PrintOut Next End Subws2 .Range(″F1″).Value = ws1.Cells(i+5,2).Value ネット等で調べて、上記のようなマクロで作業してます。(マクロの設定方法が間違っているところがあると思いますが?)

専門家に質問してみよう