EXCELの書式自動設定のおかげで、あるセルの値がmm月dd日と表示されて、実に困った。過剰で、お節介な機能で、しかもどういう条件で起こるか、わからない。excelはおせっかいな奴だ。 そこで、仕方がないので、vbaでセルに値を設定した直後に、.NumberForamtLocal = "G/標準”で書式を強制的に入れるようにして、回避したのであった。やれやれ。
2022年8月24日水曜日
2022年8月19日金曜日
accessのテーブルを固定長テキストファイルにエクスポートするのにDocmd.transfertextではなく、print(vba)を使ったというお話。
DoCmd.TransferTextでacExportFixedを指定してのテキスト出力すると、「specification name/定義名が必要です」とか言われて、面倒くさいので、テーブルの内容をprintするvbaを書いてみた。 adoでもdaoでもどちらでも良いので、参照設定で、ライブラリを設定し、テーブルの内容を1個ずつ、printで吐き出せば良い。これだけだ。 specificationNameに悩まされることもなく、テキストファイルが得られる。accessのtblAがフィールドが1つのテーブルであったと仮定し、DAOで書くと
Sub ExportText()
Dim dbs as Database '参照設定でDAOを設定せよ
Dim rs as RecordSet
Dim IngFileNum as Long
Dim strOutPut as String
Dim path1 as String
Dim file1 as String
path1 = CurrentProject.path & "¥OUTPUT¥"
file1 = "tblA.txt"
IngFileNum = FreeFile()
Open path1 & file1 For OutPut As #IngFileNum
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tblA")
With rst
do Until .EOF
print #IngFileNum,rst(0) & vbCrLf; 'tblAにはフィールドが1つ
.MoveNext
Loop
.Close
End With
Close #IngFileNum
End Sub
2022年8月18日木曜日
accessのテーブルを固定長のテキストファイルにエクスポートしようとして、七転八倒し、学んだこと。
expression.TransferText (TransferType, SpecificationName, TableName, FileName, HasFieldNames, HTMLTableName, CodePage)
expression A variable that represents a DoCmd object.
DoCmd.TransferText acExportFixed, "specNameA", _
"tableA", "C:\Txtfiles\April.txt"
DoCmd.TransferTextでacExportFixedを指定してのテキスト出力すると、「specification name/定義名が必要です」と怒られる。
そこで、エクスポートウィザードの操作を保存したものを指定しても「定義名が見つからない」と再び、怒られる。
そもそもこの「specification name/定義名」は、エクスポートウィザードの操作を保存した名前ではないのである。
エクスポートウィザードの操作を実施したあとに出てくる、保存しますかのチェックボックスをチェック印をつけておかないと駄目なのである。
そうすると、定義というボタンが出現するのだ。ここで、specification name/定義名を定義できるのである。そして、この定義名をspecification nameに指定するのである。
ポイントは、specification name/定義名は、エクスポートウィザードの操作を保存した名前ではないということだ。
しかも、エクスポートウィザードの延長で、保存した名前と「specification name/定義名」が似ているので、余計に惑わされるのである。
2022年8月16日火曜日
accessのクエリでテキストを抽出条件とする場合、例えば1 でないものを抽出する条件は<>"1"だが、nullも忘れるな
accessのクエリでテキストを抽出条件とする場合、例えば1でないものを抽出する条件は<>"1"だが、or nullも忘れるな
2022年7月22日金曜日
vba/excelの桁数制限下での左(前方)0詰めと右(後方)半角空白詰めのひとつの手法
vbaの4桁右ゼロ詰めは、Format(key1,"0000") EXCELシートのAnセルの内容を4桁左(前方)ゼロ詰めする場合、=TEXT(An,"0000")の関数を埋め込む。 vbaの40桁右(後方)半角空白詰めは、Left(key2 & String(40," "),40)
2022年7月14日木曜日
vbaで最大行を求めるにはxldownよりもxlupを使うのが良さそうだ。これをVBA SNIPPETSにする。
Cells(1, 1).End(xlDown).Rowではなく、Cells(Rows.Count, 1).End(xlUp).Rowの方が良さそうだ。
'Snippets for VBA 'Get maxRow and maxClm Dim maxRow As Long maxRow = Cells(Rows.Count, 1).End(xlUp).Row 'the last Row of column A maxClm = Cells(1, Columns.Count).End(xlToLeft).Column 'max Column of row 1
2022年7月6日水曜日
mk editorはEUCかシフトJISか判定できない時に「ShiftJISまたはEUCで文字列を識別できませんでした。EUCとして開いて問いでしょうか?[はい]EUCとして開く[いいえ]ShiftJISで開くというメッセージを出す。
mk editorはEUCかシフトJISか判定できない時に「ShiftJISまたはEUCで文字列を識別できませんでした。EUCとして開いてよいでしょうか?[はい]EUCとして開く[いいえ]ShiftJISで開くというメッセージを出す。
登録:
投稿 (Atom)