2022年8月24日水曜日

excel vbaでセルの値がmm 月dd日と表示されてしまうのを回避した

EXCELの書式自動設定のおかげで、あるセルの値がmm月dd日と表示されて、実に困った。過剰で、お節介な機能で、しかもどういう条件で起こるか、わからない。excelはおせっかいな奴だ。
そこで、仕方がないので、vbaでセルに値を設定した直後に、.NumberForamtLocal = "G/標準”で書式を強制的に入れるようにして、回避したのであった。やれやれ。

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で開くというメッセージを出す。