ブログ主が仕事や個人的に学んだPC系・プログラミング系(VBAとかHTML)について書いていく備忘録ブログ。
※ここで記載する内容はあくまで「個人的に」上手くいく内容です。ご使用には十分注意してください
Posted by 若槻風亜 - 2013.07.06,Sat
(対象)Excel VBA
(確認)Excel2003
今回は指定したブックが開いているか否かのファンクションです。
たとえば外部ファイルを開いてそこにある値を持って来たい時、
すでに開いているとエラーになったりしませんか?
(ブログ主は時々なります←開きっぱなしにすることがある)
そんな時、とりあえず開いているかいないかの確認をする
ファンクションです。
これ以外の方法も(作ったこと忘れたので)色々やっていますが、
とりあえず一番単純なものを。
これの結果次第でエラーとして処理するか開く動作を無視して
そのまま次の動作にいくかもあなた次第。
'==============================================================
' ファンクション
' : 指定したブックが開いているかどうかの判断(True/False)
'==============================================================
Function CheckOpenBook(CheckBookName As String) As Boolean
'■ワークブック変数を宣言
Dim WB_A As Workbook
'■初期化
CheckOpenBook = False
'■開いているブックを全て探し、指定したファイルの有無を確認
For Each WB_A In Workbooks
If WB_A.Name = CheckBookName Then
CheckOpenBook = True
Exit For
End If
Next
End Function
――――――――――――――――――――――――――――――――(使い方例)
Dim Flg as Boolean
Flg = CheckOpenBook("aaa\bbb.xls")
If Flg Then
Msgbox "開いてるよ"
Else
Msgbox "開いてないよ"
End If
→指定したファイルが開いていたらTrue、開いてなかったら
Falseを返すので、その値によって処理を分ける
ちょいちょい役立つものだと思います。
ちなみに、探すと似たようなもの書いたサイトさん
いっぱい出てきます。
真面目に作ってる方多いので、大変参考になります。
PR
Posted by 若槻風亜 - 2013.07.04,Thu
(対象)Excel VBA
(確認)Excel2003
今回は列番号から列名を取得するファンクションと
列名から列番号を取得するファンクションです。
列名から~はあんまり使いませんが、列番号から
列名を取得する方のファンクションは結構使えると
思います。
Dim j as Integer
Dim k as Integer
i = RetuMeiHenkan("A")
j = RetuMeiHenkan("T")
For k = i to j
ActiveSheet.Cells(2 , k).Value = "In!"
Next
(説明)
AとTを指定して各列の列番号を取得。
その分だけFor文を回して処理が行える。
AA列以降も可能な(はず)
(確認)Excel2003
今回は列番号から列名を取得するファンクションと
列名から列番号を取得するファンクションです。
列名から~はあんまり使いませんが、列番号から
列名を取得する方のファンクションは結構使えると
思います。
'==============================================
' 列番号を列名に変換
'==============================================
Function RetuHenkan(ByVal K As Integer) As String
Dim RetuMei As Variant
Dim RetuA As Integer
Dim RetuB As Integer
RetuMei = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", _
"O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z")
If K > 26 Then
RetuA = Int(K / 26)
RetuB = K Mod 26
If RetuB = 0 Then
RetuA = RetuA - 1
RetuB = 26
End If
RetuHenkan = RetuMei(RetuA - 1) & RetuMei(RetuB - 1)
Else
RetuHenkan = RetuMei(K - 1)
End If
End Function
――――――――――――――――――――――――――――――――
(使い方例)
Dim Retu as String
Dim i as Integer
For i = 1 to 20
Retu = RetuHenkan(i)
ActiveSheet.Range(Retu & "2").Value = "In!"
Next
(説明)
Iを1から20まで回し、Iの値が何列かを求める。
例だとA列からT列までが対象になる。
AA列以降も使えるようにはなっている(はず)
(使い方例)
Dim Retu as String
Dim i as Integer
For i = 1 to 20
Retu = RetuHenkan(i)
ActiveSheet.Range(Retu & "2").Value = "In!"
Next
(説明)
Iを1から20まで回し、Iの値が何列かを求める。
例だとA列からT列までが対象になる。
AA列以降も使えるようにはなっている(はず)
'==============================================
' 列名を列番号に変換
'==============================================
Function RetuMeiHenkan(ByVal Retu As String) As Integer
Dim RetuMei As Variant
Dim RetuA As Integer, RetuB As Integer
Dim RetuC As String, RetuD As String
RetuMei = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", _
"O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z")
RetuC = Join(RetuMei, "")
If Len(Retu) > 1 Then
'1文字目
RetuD = Left(Retu, 1)
RetuA = InStr(RetuC, RetuD)
'2文字目
RetuD = Right(Retu, 1)
RetuB = InStr(RetuC, RetuD)
RetuMeiHenkan = (RetuA * 26) + RetuB
Else
RetuA = InStr(RetuC, Retu)
RetuMeiHenkan = RetuA
End If
End Function
――――――――――――――――――――――――――――――――
(使い方例)
Dim i as Integer(使い方例)
Dim j as Integer
Dim k as Integer
i = RetuMeiHenkan("A")
j = RetuMeiHenkan("T")
For k = i to j
ActiveSheet.Cells(2 , k).Value = "In!"
Next
(説明)
AとTを指定して各列の列番号を取得。
その分だけFor文を回して処理が行える。
AA列以降も可能な(はず)
Posted by 若槻風亜 - 2013.07.03,Wed
(対象)Access VBA
(確認)Access2003
今回はマウスホイールの制御についてです。
「Access VBA マウスホイール制御」
(確認)Access2003
今回はマウスホイールの制御についてです。
「Access VBA マウスホイール制御」
――――――――
○やりたいこと
――――――――
――――――――
→フォームでマウスホイールをするとレコードが移動してしまうので
それをなくす
――――――――
○ソース
――――――――
Dim bbb As Integer
'=============================================
' フォームの読み込み時
'=============================================
Private Sub Form_Load()
bbb = 0
End Sub
――――――――
☆やっていること
――――――――
フォームの読み込み時に変数bbbに0を入れる
'=============================================
'レコード移動時
'=============================================
Private Sub Form_Current()
If Me.NewRecord Then Exit Sub
Me.[コントロール名].SetFocus
Me.Dirty = True
End Sub
――――――――
☆やっていること
――――――――
レコード移動時の処理。
1.次のレコードが新しいレコードの時は作用しない
2.どれでもいいからコントロールを選んでおく。
これを選ばないとエラーになる
これを選ばないとエラーになる
3.「Dirty」はカレントレコードの変更の有無を表す。
今はTrueなので変更有り→変更有り=更新前処理が入る
今はTrueなので変更有り→変更有り=更新前処理が入る
'=============================================
' マウスホイールを動かした時
'=============================================
Private Sub Form_MouseWheel(ByVal Page As Boolean, ByVal Count As Long)
bbb = Count
End Sub
――――――――
☆やっていること
――――――――
マウスホイールが動かされたらbbbにCountの値を入れる
(Countの値=ホイールされて動こうとしているレコードの数)
'=============================================
' レコードに変更があった時
'=============================================
Private Sub Form_BeforeUpdate(Cancel As Integer)
If bbb <> 0 Then
Cancel = True
bbb = 0
End If
End Sub
――――――――
☆やっていること
――――――――
bbbの値が0でない時にCancelをTrueにして処理をキャンセルする。
※1ここでキャンセルされると移動もキャンセルになる
※2判断は必ず「0でない」にする。bbbの値はマイナス値にもなる
※3bbbの値を初期化しておく
(上のレコード移動時の処理を超えると自動的に入ってくる)
=======================
<<
前のページ
プロフィール
HN:
若槻風亜
性別:
女性
職業:
会社員
趣味:
創作、プログラミング
自己紹介:
仕事や個人で学んだことをまとめておきたかったがために備忘録ブログを立ち上げました。
あくまで自分が学んだこと・自分が出来たことなので、ご覧くださる場合は参照レベルでお願いします。
あくまで自分が学んだこと・自分が出来たことなので、ご覧くださる場合は参照レベルでお願いします。
ブログ内検索
カレンダー
最新記事
(12/31)
(12/30)
(03/27)
(11/09)
(10/07)
P R
最新トラックバック
コガネモチ
フリーエリア
Template by mavericyard*
Powered by "Samurai Factory"
Powered by "Samurai Factory"