VB6.0で、EXCELを編集し印刷するプログラムを作成しており、セル内の半角文字列を均等割り付けしたいと
考えています。
Excelでは、半角数字のみで構成された文字列の均等割り付けができませんが、文字の間にスペースを
入れることで均等割り付けが働くようになります。
そこでVBのプログラムより、既存ファイルのセルに半角数字と半角スペースを交互に80文字ほどセットし、
その後に半角スペースの文字サイズのみを1にする処理を下記のように記述したのですが、20~30文字
くらい処理したところで実行時エラーが発生してしまいます。
Set xlsApp = CreateObject("Excel.Application")
Set xlsBook = xlsApp.Workbooks.Open(ファイル名)
Set xlsSheet = xlsBook.Worksheets(1)
With xlsSheet
…
strTemp = ""
For i = 1 To Len(strText) '1文字おきにスペースを挟む
strTemp = strTemp & Mid(strText, i, 1)
If i <> Len(strText) Then
strTemp = strTemp & " "
End If
Next i
.Cells(10, 7).Value = strTemp
'途中に挟んだスペースのサイズを1にする
For i = 2 To Len(strTemp) Step 2
.Cells(10, 7).Characters(i, 1).Font.Size = 1 ←実行時エラーはここで出ます
Next i
…
End With
エラーの内容は、
実行時エラー -2147417851(80010105)
'~' メソッドは失敗しました: '~'オブジェクト
です。
どうやら、このエラーが出たときはExcelがフリーズしたような状態になっているようでした
(×ボタンを押しても反応がなく、セル等の入力もできないが、ブックは×ボタンで閉じることができ、
ブックを閉じるとExcelも終了します。が、タスクマネージャを見るとプロセスは残っています)。また、
実行時エラーが発生するループ箇所をコメントにすると、エラーは発生しなくなります。
数種類のPCで試したのですが、全く同じ条件のPCでもエラーが発生するものとしないものがあり、
原因がわからずに困っています。なお、試したPCはOSがすべてWindowsXP、Excelのバージョンは
2000と2003です。プログラムはディストリビューションウィザードで作成したインストーラを使って
配布しています。また、Excel Objectの参照設定は外してコンパイルしています。
記述方法がよくないのでしょうか?みなさまのお知恵を拝借できれば幸いです。
VB6.0で、EXCELを編集し印刷するプログラムを作成しており、セル内の半角文字列を均等割り付けしたいと
考えています。
Excelでは、半角数字のみで構成された文字列の均等割り付けができませんが、文字の間にスペースを
入れることで均等割り付けが働くようになります。
そこでVBのプログラムより、既存ファイルのセルに半角数字と半角スペースを交互に80文字ほどセットし、
その後に半角スペースの文字サイズのみを1にする処理を下記のように記述したのですが、20~30文字
くらい処理したところで実行時エラーが発生してしまいます。
Set xlsApp = CreateObject("Excel.Application")
Set xlsBook = xlsApp.Workbooks.Open(ファイル名)
Set xlsSheet = xlsBook.Worksheets(1)
With xlsSheet
…
strTemp = ""
For i = 1 To Len(strText) '1文字おきにスペースを挟む
strTemp = strTemp & Mid(strText, i, 1)
If i <> Len(strText) Then
strTemp = strTemp & " "
End If
Next i
.Cells(10, 7).Value = strTemp
'途中に挟んだスペースのサイズを1にする
For i = 2 To Len(strTemp) Step 2
.Cells(10, 7).Characters(i, 1).Font.Size = 1 ←実行時エラーはここで出ます
Next i
…
End With
エラーの内容は、
実行時エラー -2147417851(80010105)
'~' メソッドは失敗しました: '~'オブジェクト
です。
どうやら、このエラーが出たときはExcelがフリーズしたような状態になっているようでした
(×ボタンを押しても反応がなく、セル等の入力もできないが、ブックは×ボタンで閉じることができ、
ブックを閉じるとExcelも終了します。が、タスクマネージャを見るとプロセスは残っています)。また、
実行時エラーが発生するループ箇所をコメントにすると、エラーは発生しなくなります。
数種類のPCで試したのですが、全く同じ条件のPCでもエラーが発生するものとしないものがあり、
原因がわからずに困っています。なお、試したPCはOSがすべてWindowsXP、Excelのバージョンは
2000と2003です。プログラムはディストリビューションウィザードで作成したインストーラを使って
配布しています。また、Excel Objectの参照設定は外してコンパイルしています。
記述方法がよくないのでしょうか?みなさまのお知恵を拝借できれば幸いです。
早速質問させていただきます。
withでオブジェクト2つ指定したいのですが方法はありますか?
例えばComboBox1とComboBox2に同じものを入れたい場合です。
With ComboBox1
.AddItem "abc"
.AddItem "123"
.AddItem "アイウ"
End With
上記と同じ事をComboBox2でもしたいです。
よろしくお願いします。
はじめまして
2003 XP
UserFormにCommandbuttonが12個あります。
Private Sub CommandButton1_Click()
If Me.MultiPage1.Value = 0 Then
TextBox3.Value = TextBox3 & "1"
Else: TextBox1.Value = TextBox1 & "1"
End If
End Sub
Private Sub CommandButton2_Click()
If Me.MultiPage1.Value = 0 Then
TextBox3.Value = TextBox3 & "2"
Else: TextBox1.Value = TextBox1 & "2"
End If
End Sub
Private Sub CommandButton3_Click()
If Me.MultiPage1.Value = 0 Then
TextBox3.Value = TextBox3 & "3"
Else: TextBox1.Value = TextBox1 & "3"
End If
End Sub
Private Sub CommandButton4_Click()
If Me.MultiPage1.Value = 0 Then
TextBox3.Value = TextBox3 & "4"
Else: TextBox1.Value = TextBox1 & "4"
End If
End Sub
Private Sub CommandButton5_Click()
If Me.MultiPage1.Value = 0 Then
TextBox3.Value = TextBox3 & "5"
Else: TextBox1.Value = TextBox1 & "5"
End If
End Sub
Private Sub CommandButton6_Click()
If Me.MultiPage1.Value = 0 Then
TextBox3.Value = TextBox3 & "6"
Else: TextBox1.Value = TextBox1 & "6"
End If
End Sub
Private Sub CommandButton7_Click()
If Me.MultiPage1.Value = 0 Then
TextBox3.Value = TextBox3 & "7"
Else: TextBox1.Value = TextBox1 & "7"
End If
End Sub
Private Sub CommandButton8_Click()
If Me.MultiPage1.Value = 0 Then
TextBox3.Value = TextBox3 & "8"
Else: TextBox1.Value = TextBox1 & "8"
End If
End Sub
Private Sub CommandButton9_Click()
If Me.MultiPage1.Value = 0 Then
TextBox3.Value = TextBox3 & "9"
Else: TextBox1.Value = TextBox1 & "9"
End If
End Sub
Private Sub CommandButton10_Click()
If Me.MultiPage1.Value = 0 Then
TextBox3.Value = TextBox3 & "0"
Else: TextBox1.Value = TextBox1 & "0"
End If
End Sub
Private Sub CommandButton11_Click()
If Me.MultiPage1.Value = 0 Then
TextBox3.Value = TextBox3 & "00"
Else: TextBox1.Value = TextBox1 & "00"
End If
End Sub
Private Sub CommandButton12_Click()
If Me.MultiPage1.Value = 0 Then
TextBox3.Value = TextBox3 & "000"
Else: TextBox1.Value = TextBox1 & "000"
End If
End Sub
これをもっとスマートに出来ないでしょうか?
宜しくお願いします。