Excel VBA 質問スレ Part51

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (スププ Sd4a-O827)
垢版 |
2017/11/08(水) 11:26:30.13ID:+KUB1/9hd

スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※関連スレ
VBAなんでも質問スレ Part2
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://mevius.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 126
https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/

※前スレ
Excel VBA 質問スレ Part50
http://mevius.2ch.net/test/read.cgi/tech/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
2017/12/24(日) 22:01:25.06ID:TDjZS1ex0
>>715
ありがとうございます
OffSet()だと原点がゼロなので
そういうのと混同していたかも知れません
2017/12/24(日) 22:44:17.96ID:4FfGU/eI0
Dim FSO As Object
Set FSO = CreateObject("scripting.filesystemobject")
Dim folder As Object
Set folder = FSO.getfolder(ファイルパス)
Dim f As Object
 For Each f In folder.Files
  If f.Name Like "*" & Month(Date) & "*" Then
   ’ここでファイル名を翌月に変えてコピーを作成したい
  End If
 Next

ファイル名は「AAA〇〇月BBB」で統一(ABは文字列で〇〇は月を二桁表示)
抽出できた今月ファイルをコピーして名前の〇〇を翌月に変更したもの(翌月ファイル)を同フォルダ内に作成したいです
コピー元ファイル名を継承して一部だけ変更する良い方法が見つからなかったので教えてください
2017/12/24(日) 23:29:24.13ID:XB6s5ekxa
>>712
そのセル全部のRangeに対して"=B2-C2"でいける。
2017/12/25(月) 00:16:31.32ID:2KDGjSox0
>>717
Sub foo(FolderPath As String)
Dim FSO As New FileSystemObject
Dim c As New Collection
Dim Folder As Folder
Dim File As File

FindWord = "*" & Month(Date) & "*"
Set Folder = FSO.GetFolder(FolderPath)
For Each File In Folder.Files
If File.Name Like FindWord Then Exit For
Next
If File Is Nothing Then Exit Sub

s = Split(File.Path, "\")
For i = LBound(s) To UBound(s)
If s(i) Like FindWord Then
e = Split(s(i), ".")
s(i) = Month(DateAdd("m", 1, Date)) & s(1)
End If
FilePath = FilePath & s(i)
If i < UBound(s) Then FilePath = FilePath & "\"
Next

FSO.CopyFile File.Path, FilePath
End Sub

試してないけどこんな感じかなぁ。
2017/12/25(月) 08:06:21.04ID:fMKsEfdQa
>>717
fileName = Replace(fileName,○○,××)
2017/12/25(月) 08:07:54.57ID:fMKsEfdQa
ああ、AAAとBBBに数字がない前提じゃないとダメだな
2017/12/25(月) 12:59:33.91ID:5/ecyLcnM
>>719>>720回答ありがとうございます
まだ試せていませんが
AAA○○月BBBじゃなくて
AAABBB○○月にした場合もう少し簡単に記述出来ますかね?
ちなみにABに数字は含まれてないです
723デフォルトの名無しさん (ワッチョイ ff7f-SZyW)
垢版 |
2017/12/25(月) 16:18:43.87ID:dIh/hlW50
んんんんあああああああああああああああああああああああああああああああああ
2017/12/25(月) 16:44:33.34ID:DuOFgh3Va
コピーしてファイル名置換するだけでしょ?
フォルダもすでに取得してるなら
fso.copyfile file.Path,folder.Path & "\" & Replace(file.Name,"○○","××")
だけで行けるんじゃね
2017/12/25(月) 17:30:49.11ID:1470x9yD0
UserFormに「次へ」のボタンをつくり複数のUserFormを次々と経由することで対話式に値を取得していきたいと思っています
誤った選択をしてしまった場合に備え、戻るボタンも作るとします
○UserForm1の「次へ」ボタンのクリックイベントに以下のように記述しました
Me.Hide
UserForm2.Show
○そしてUserForm2の「戻る」ボタンのクリックイベントには以下のように
Me.Hide
UserForm1.Show

うまくいったと思いきや、一度1に戻ってからもう一度UserForm2を再表示させると
UserForm2のinitializeに書いた処理が実行されません。

仕方が無いので1の次へに
UserForm2.Show
Unload Me
と書いてみると、今度は2から戻る時に、「フォームは既に表示されています。モーダルに表示できません」と出ます
2の「戻る」には上に書いたようにMe.Hideがあるにも関わらずこのエラー表示
解決法はありますか?
2017/12/25(月) 17:46:45.39ID:DuOFgh3Va
>>725
ユーザーフォームの行き来はめんどくさいしスパゲティになりがちだからやめた方がいいと思う
というのはさておき、initializeじゃなくてactivateイベントにしてみたらどうかね
2017/12/25(月) 17:48:18.57ID:1470x9yD0
いやいや何か間違えてる
修正

仕方が無いので2の「戻る」に
UserForm1.Show
Unload Me
と書いてみると、今度は1から2にもう一度行こうとすると、「フォームは既に表示されています。モーダルに表示できません」と出ます
ついでにとにかくhideは避けてすべてunloadにしてもやはり2→1の段階で同じアラート
解決法はありますか?
2017/12/25(月) 17:48:59.15ID:1470x9yD0
>>726
ありがとうございます
調べてみます
分からなかったらまた書きますのでお願いします・・・
2017/12/25(月) 18:01:10.24ID:1470x9yD0
>>726
うまくいったようです
3時間ほど解決法が見つからず頭抱えてました
感謝です
2017/12/25(月) 22:53:06.92ID:S4ukHgvI0
sub test()
'マクロ起動用エクセルがあるフォルダ内のフォルダ名の取得
Dim strPattern As String
Dim strFolder As String
strPattern = "C:\xxxxx"
strFolder = Dir(strPattern, vbDirectory)

Do While Len(strFolder) > 0
If GetAttr(strPattern & strFolder) And vbDirectory Then
If strFolder <> "." And strFolder <> ".." Then 'if文始まり
'各フォルダ内にあるエクセルファイル名の取得
Dim FSO As Object
Set FSO = CreateObject("scripting.filesystemobject")
Dim folder As Object
Set folder = FSO.getfolder(strPattern & strFolder)
Dim f As Object
For Each f In folder.Files
If f.Name Like "*" & Month(Date) & "*" Then 'ファイルパスに今月が含まれている場合
FSO.copyfile f.Path, folder.Path & "\" & Replace(f.Name, Month(Date), Month(DateAdd("m", 1, Date)))
Debug.Print f.Name
End If
Next
End If 'if文終わり
End If
strFolder = Dir()
Loop
End Sub

717ですが上の記述で一応期待通りの動作をしてくれました
皆さんありがとうございました
ただこれだとファイル名に1〜12の数字を使えなかったりエクセル以外も取得できるのでまだ改良が必要そうです
2017/12/25(月) 23:30:15.25ID:63usksBrx
>>730
ファイルの種類に関しては、ループ処理の冒頭でFSO.GetExtensionName(f.Path)の戻り値を調べて処理を分岐させるようにすれば、狙った種類のファイルだけを処理できるようになると思うよ
732デフォルトの名無しさん (ワッチョイ 637b-fQzT)
垢版 |
2017/12/25(月) 23:37:14.60ID:aEhB4dZD0
ググったのですがどうしてもわからないので教えてください

【環境】Windows10、Excel2010
【不具合症状】新規コードの作成ができない

新規bookを作成し、VBEを起動した際、通常はプロジェクトウィンドウに
「Sheet1-3」が表示されるかと思いますが、真っ白なまま何も表示されない状態です。
メニューの「挿入」をクリックしても、標準モジュールがグレイアウトになってしまい、
新規コードの作成が行えない状態です。

ITに相談しても初めての事例とのことでわかりませんでした。
コンパネからのofficeの修復も行いましたが改善されません。
マクロのセキュリティは「全て有効」で設定されています。
xlsm形式で保存もしてみましたがダメでした。
PC再起動も試してみました。

同一PCで、既存作成マクロの実行は行えます。
既存マクロのVBEを起動した際、プロジェクトウィンドウやコードウィンドウは
普通に見えますが、コードウィンドウで1文字でも編集すると、F5実行時に
「ファイルが見つかりません」とのエラーが出ます。ステップ実行でも同じです。
編集は例えコメント行でも同じエラーが出ます。

新規作成は全てにおいて不可です。
自動記録をしようとすると「マクロが記録できませんでした」とエラーが出ます。
マクロの作成ボタンは押せますが、押してもコードウィンドウが起動しません。

新規作成と編集が制限されているようなのですが、どこから変更するのかが
どうしてもわかりませんでした。もしわかる方いらしたら教えていただけないでしょうか?

スレチであれば、該当スレッドに誘導していただけると助かります。
よろしくお願いします。
2017/12/26(火) 01:59:52.47ID:fIC/1lmja
>>732
エクセルのレジストリ削除してみてもダメ?
2017/12/26(火) 06:55:25.36ID:cWcYrW8d0
>>732
そのマシンに新規ユーザーつくって現象が発生する?
テンポラリやら消したら直るかもしれん
あとセキュリティ対策ソフト切って試すとか
2017/12/26(火) 06:58:32.09ID:gkP6o6Ks0
>>717
「01月」というファイル名のコピーが、「02月」として、同じフォルダに入れるのか

フォルダ内に、「01月」「02月」があるとして、
この状態で、もう一度、同じ事をするなよ!w

設計として、同じフォルダに入れるのはおかしい。
異なるフォルダに入れるべき

わかりやすいように投稿する時は、名前欄に、717 と入れてくれ
2017/12/26(火) 07:54:39.17ID:6qOsufVw0
>>733
>>734

732です、レスありがとうございます。

最悪、officeの再インストールも覚悟しています。
レジストリかも?とはITには言われましたが・・・・

新規ユーザーはまだ試していません。
セキュリティ対策ソフトはITの管轄なので、切れるかどうか不明ですが
聞いてみます。

こちらの書き込みは自宅からなので、次のレスが遅くなるかもしれません。
よろしくお願いします。
2017/12/26(火) 08:20:51.65ID:upqov7ALa
>>735
運用の話までは管轄外じゃね
あとは自分で考えりゃいいよ
738デフォルトの名無しさん (ワッチョイ ff23-pwf+)
垢版 |
2017/12/27(水) 09:27:07.83ID:58xyBvha0
>>719とか>>730とかのコードで意味わかんないところがいくつかある
(コードが間違ってるって意味じゃなくて、こっちの知識が足りなくて理解が追い付かないって意味です)
まず>>719
なんでコレクションを宣言してるのか?
しかもなぜ宣言したのに使わないのか?
変数eは何のために使ってるのか?
ファイルのパスをsplitで分割してるけど、
ファイル名だったらinstrrevで\を探したほうが話が早いんじゃないか?
等々

>>730
ループの中でdim使うのは大丈夫なの?
複数回宣言したらエラーになりそう
後、一番知りたいのが
If strFolder <> "." And strFolder <> ".." Then
これ、どういう意味なのか解説をお願いしたい
(書いてる人たちにケチつけてるんじゃなくて、本当に分らない事を教えて欲しいだけです)
どなたか教えてください、よろしくお願いします
2017/12/27(水) 09:45:06.41ID:fOQst04i0
>>738
コマンドプロンプトで cd .. って打ってみたら判る 
c:>test>test1> cd ..
親ディレクトリに移動する。つまり親フォルダの事

「.」 は「.」 カレントフォルダの事
2017/12/27(水) 10:22:00.13ID:fOQst04i0
寝ぼけて書いてたからめちゃくちゃだな^^;

c:\test\test1> というフォルダがあったとしてそこで
c:\test\test1>cd .. と打てば
c:\test> と親ディレクトリ(フォルダ)に移動する
2017/12/27(水) 10:45:52.46ID:90Vjgj1Fa
>>738
ループ内でDimしてもエラーにはならないよ
その都度メモリが割り当てられるだけじゃないかな
フォルダ名の"."と".."は相対パスじゃなかったかな
一個上と二個上の親フォルダだったと思う
間違ってるかもしれないから調べてね
2017/12/27(水) 10:46:46.56ID:90Vjgj1Fa
あ、間違ってたw
.がカレントフォルダで..がひとつ上の親フォルダね
すんませんな
2017/12/27(水) 10:48:05.37ID:90Vjgj1Fa
あとsplitの問題に関しては読みやすさとか書きやすさじゃね
俺もよくやる
楽だからね
2017/12/27(水) 12:51:59.50ID:u0gTyM9V0
beforeStr = "あ12月い"

afterStr = beforeStr.sub(/\d\d月/) do |matched|
month = matched.to_i + 1
month = 1 if month == 13

sprintf("%02d", month)
end
puts afterStr

#=> あ01い

Ruby で、文字列を置換した。
こういう処理は、Ruby が良い。

PowerShell でも作ってみたが、簡単な置換方法がなかった。
置換時に、コールバック関数を取れる、sub のような関数が無かった

わかりやすいように質問者が投稿する時は、名前欄に、717 と入れてくれ
2017/12/27(水) 12:58:13.04ID:u0gTyM9V0
間違っていたので、修正した

beforeStr = "あ12月い"

afterStr = beforeStr.sub(/(\d\d)月/) do |matched|
month = $1.to_i + 1
month = 1 if month == 13

sprintf("%02d", month) + '月'
end

puts afterStr #=> あ01月い
2017/12/27(水) 13:38:32.87ID:lJNZ7xHQ0
VBA勉強し始めて間もない時に組んだマクロに
replaceという名前のプロシージャを作りました
そのことはすっかり忘れてたのですが、最近になってそのマクロを手直しする必要があって
その中でReplace関数を使おうとしたらエラーが出る
おかしいなと思い調べてみたらSub replace() を発見
プロシージャの名前を変えたら大丈夫かと思いきやなぜかどこかに何かが残っているようでエラーがでる
一旦そのモジュールを解放したらReplace関数は使えるようにはなりました
しかし、なぜかReplaceと打ってもreplaceとなる
replaceと打ってもそのままreplace
replaceをReplace関数と認識してくれてはいるものの、どこかに何かが残っている
他のブックでは起きないのでまぁそれほど支障はないものの、もし分かる方いらっしゃったら
どうすればいいか教えてください
2017/12/27(水) 13:47:19.08ID:fCTi8N3va
Replaceで変数宣言してみ
2017/12/27(水) 15:20:29.55ID:DW1nj5RcM
>>746
大文字小文字は、現在開いてるコード全体で統一されてしまうからな。
変数でもプロシャージャでもいいから、定義し直すと内部で覚えてる大文字小文字が上書きされるぽ
この仕様のせいで、他人の書いたブック開いたまま修正保存するといつのまにか変わってたりする。
するとWinMergeとかでDIFFしたときにイラッ
独り言でした
2017/12/27(水) 18:43:06.62ID:8Kp24ZKYM
プロシージャ外に書いたオブジェクトの寿命はいつまでなのでしょうか?
グローバル変数にオブジェクトを保存してそれをfunctionで返すシングルトンオブジェクトを作ったのですが、
プログラムが一度終了して再度起動した際もオブジェクトが残っており、ゴミデータでエラーが起きています。
一度ファイルを全て閉じるまでは残るものなのでしょうか?
2017/12/27(水) 18:55:21.26ID:K6GLaCg8a
>>749
グローバル変数ならエラーで止まるかブックが生きてる限りは生きてるんじゃね
2017/12/27(水) 19:03:21.38ID:4eyrVwN9H
>>749
あとEndで止めると死ぬ
752デフォルトの名無しさん (スップ Sd1f-Eeo6)
垢版 |
2017/12/27(水) 20:23:28.17ID:ry3vSREld
>>751
End なあ、せめて Class_Terminate()して欲しかった
2017/12/27(水) 20:40:54.92ID:RyDVOJzS0
>>732 です。

officeの再インストール試してみましたが
不具合解消せずでした・・・・無念

幸い既存マクロは動くので、新規作成と実行は
他のPCでやることにしました。

不具合はExcelだけで、Accessでは特に問題ありませんでした。
一応ご報告まで。
2017/12/27(水) 20:55:52.26ID:K6GLaCg8a
>>752
てか、マクロ終わったら初期化すりゃよくね?
できない仕様なの?
2017/12/27(水) 21:08:27.21ID:CubzVxEy0
>>754
マクロ終わったら誰が初期化するん?
2017/12/27(水) 23:24:01.01ID:TIhBPqs40
>>753
マクロの記録から操作を記録すると
標準モジュール作成される?
2017/12/27(水) 23:29:35.39ID:0b7v1yOK0
>>751

Endだとなにがまずいのでしょうか
2017/12/28(木) 02:02:28.11ID:uSnaEunu0
>>757
Globalで保持していると想定していた変数がいつのまにかクリアされていて想定外の動作をおこし痛い目にあったことがあります。
調べてみたら、エラー発生時またはEnd通過時にGlobal変数の寿命が尽きるようで、、
それ以来、Global変数もEnd Statementも避けています。
記憶が必要な場合は、Cell値やValidation値またはDocumentProperty等を使うようになりました。
2017/12/28(木) 02:45:31.50ID:m7DZbaKUH
VBA初心者です
2つのセルがイコールになるように別のセルの値を変化させるというVBAソルバを作成したいのですが、エラーばかりで全く進みません・・・
現在は7行目から10行目まで構文エラーが出ています。
どなたかご教授願います・・・

Sub Solver()
i = 1
Do Until i = 313
'-------------------------------------------
Application.DisplayAlerts = False
SolverOk SetCell:="K" & i, ByChange:="J" & i
SolverAdd cellRef:=Range("K1:K313"), _
Relation:=2, _
FormulaText:=Range("L1:L313"), _
Application.DisplayAlerts = True
'---------------------------------------------
SolverSolve
i = i + 1
Loop
End Sub
2017/12/28(木) 05:04:43.84ID:BF7frMSQ0
>>747
>>748
ありがとうございました。
2017/12/28(木) 08:06:18.47ID:VokPBxMja
>>755
マクロ終わったらオブジェクト破棄するんじゃダメなのかと言うことだが
まあダメな使用なんだろうけど
762デフォルトの名無しさん (スップ Sdea-4yVJ)
垢版 |
2017/12/28(木) 08:14:47.46ID:ezpQ52SId
イミディエイトウィンドウにあるオブジェクトのことだよね
2017/12/28(木) 17:26:42.52ID:GeC01ME+0
>>749,758
そもそもプログラムが終了ってどういう事をさしてる?
ホントにプログラムが終了すれば、すべての変数の内容は失われるよ
たんに実行するコードが無くなっただけではプログラムは終了していない

Endはプログラムを終了させるけど、エラー出ただけでは終了するとは限らない
デバッグで再実行や変数見たりできるのはプログラムは中断したけど終了してないから
2017/12/28(木) 23:10:38.77ID:lWNTZScR0
>>756

753です。

マクロの記録そのものができないのです。
記録しようとすると「マクロの記録ができませんでした」と
エラーが出てしまいます。

新規作成と編集が全て制限されているようです。
セキュリティは「すべて有効」で設定しており、
そこでの問題は無いと思うのですが・・・・
2017/12/29(金) 04:00:07.55ID:G/qmS2zk0
>>759
"_" は次の行をつなげるためにつけたのだろうけど
Application.DisplayAlearts = True の前の行にも "_" が付いているから
何か貼り付け忘れか、間違って削除してしまったものがあるのでは
2017/12/29(金) 04:08:47.98ID:G/qmS2zk0
セキュリティーレベル一番高いとダメなんじゃね
2017/12/29(金) 07:22:34.45ID:b/Z/hzqU0
>>732
あー、昔そんな事象に当たったことあるよ
原因は同じかどうかは分からんけど
俺の場合とんでもなく深い階層のフォルダに置いてたら
VBEのシートモジュールが青く表示されてコードが作成できなくなった

そのファイル、とりあえず浅い階層のフォルダや
どこかのサーバに置いているなら
クライアント側にコピーして内容確認出来る?
2017/12/29(金) 08:53:00.31ID:JNsjSKSN0
732、753です
皆様レスありがとうございます。

作成の不具合は、全くの新規Bookでも起こります。
既存マクロの場合は、コードの表示と実行は行えますが
編集が制限されています。

問題が発生してから、他のPCで新規作成したマクロを
該当PCで実行しようとしましたが、それはコードの表示すら
できませんでした。ファイルサーバー経由とかではなく
デスクトップ上に置いて実行しても同じです。

Accessでは特に問題ないので、VBAそのものではなく、
Excel単体の何かだとは思うのですが、皆目見当がつきませぬ。
2017/12/29(金) 10:57:41.44ID:MXSoKJ1y0
>>765
>>759です
一部コピペして使ったので何か消してしまったのかもしれません・・・
確認してみます、ありがとうございます。
2017/12/30(土) 12:22:18.46ID:cGzM6pFo0
CreateObject("System.Collections.ArrayList")ってやったら
.NETのArrayListがVBAで使えてしまったんですが
これ隠し機能とかじゃなくて正式に使っていいんですよね?
2017/12/30(土) 13:25:09.57ID:dKM8JRI70
前にも話題に上がったけど
.NETのほんの一部はVBAからも使える
リファレンスにも書いてあったような気がする

他で代替できるのでArrayListをわざわざ使うメリットはないということで
そのときは終わったと思う
2017/12/30(土) 15:32:35.43ID:cGzM6pFo0
>>771
参考にします。ありがとうございました
2017/12/30(土) 15:33:00.15ID:xXJ5T9Ia0
>>770
.Net Frameworkの機能でコンストラクタに引数を渡す必要のないものは使えるらしい
>>771
ArrayListは各種メソッドが揃ってるからコレクションより使いやすいんじゃね?キーを使わないなら
ただ遅いのがたまに傷
774デフォルトの名無しさん (ワッチョイ 6fc3-2NT7)
垢版 |
2017/12/31(日) 08:34:16.68ID:5sx4VZ0k0
>>772
Windows APIだって使えるんだぞ?
775デフォルトの名無しさん (ワッチョイ de81-DSDK)
垢版 |
2017/12/31(日) 08:58:37.79ID:TXRnAgcd0
VBAの保存方法について
バックアップどうしてますか?
VBAのマクロだと戻る釦聞かないし、バグって復旧するとマクロの個所全部消えちゃうので2つくらいのバックアップを別ファイルでとってあるんですけど皆さんはどうしてますか?
まだ素人なので思ったのと違う処理になって戻せなくなることがしょっちゅうあるので
バックアップは大事
776775 (ワッチョイ de81-DSDK)
垢版 |
2017/12/31(日) 09:02:17.31ID:TXRnAgcd0
>>775
戻る釦ってまるい矢印の奴ね
2017/12/31(日) 09:09:26.61ID:PwPBZUwb0
>>775
バージョン管理システム入れてないなら同じになるでしょ。
俺も同じくでファイル名_Ver nnn.xlsmと言うかたちで3世代別フォルダに保存してるけど
(時たま忘れたりする^^;
2017/12/31(日) 09:49:30.47ID:aMifsa1T0
マクロ有りエクセルファイル自体にデータを入れて運用するのと、
データは別エクセルファイルにしてマクロ有りエクセルファイルでデータ入りエクセルファイルを操作するのと、
どっちがメンテナンスしやすい作り方だろうか?
いつも悩んでしまう
2017/12/31(日) 09:52:29.70ID:35C6Q16O0
アドインマクロにしましょう
2017/12/31(日) 11:06:17.25ID:fsRyV04Q0
マクロのバージョン管理ってどうやってます?
インポートファイルを分けすぎると不便なのでshareFanction見たいなインポートファイルに使いそうな関数全部入れてますが、初心者なもので開発中に関数の引数や戻り値を変えたくなるような場面が多々あり
今までのshareFanctionと互換性が保てなくなりますが、引数と戻り値を修正した関数以外でバグを潰したような関数は最新を使用したいです。
今はコピペで対応してますが
2017/12/31(日) 11:27:58.03ID:rNrttlhS0
個人なのか仕事なのか書かないと有効なレスがつかないのではないかな
2017/12/31(日) 11:34:47.18ID:fsRyV04Q0
>>781
個人です
個人で開発、個人で使用です
2017/12/31(日) 11:36:51.05ID:rNrttlhS0
>>782
ならGithubとSourceTreeで快適にできるんじゃないの?
俺も全然高度な使いこなしできてないけど楽ちんだ
2017/12/31(日) 11:55:17.97ID:fsRyV04Q0
>>783
ありがとうございます

ざっとみた感じソースファイルのバージョン管理はできそうですが、
例えばサーバーあるいはローカルマシン上にそのshareFanctionを使用している分散しておいてある場合、
それぞれのマクロを調べて更新したいファイルを選択、修正版マクロを適用する、
みたいな使い方ってできるんですかね?
2017/12/31(日) 11:57:21.02ID:fsRyV04Q0
>>784

>>例えばサーバーあるいはローカルマシン上にそのshareFanctionを使用している分散しておいてある場合、

修正
shareFanctionを使用しているファイルが
786デフォルトの名無しさん (ワッチョイ de81-DSDK)
垢版 |
2017/12/31(日) 12:53:47.48ID:TXRnAgcd0
ヴァージョンって仕事じゃないからいつから何時まででUP履歴にしたらいいかわからなん
機能変更したら必ずかもしれないけど、個人用だとやりながら変更しているからバージョン数が半端ないことになる。
2017/12/31(日) 13:10:06.47ID:sYPUhsnja
バージョン管理は大変だよな
インストーラーみたいなのつくってどうにかしようとしてるがうまく行くかわからん
2017/12/31(日) 13:25:39.05ID:pVPyHW7p0
>>786
> バージョン数が半端ないことになる。
問題ないでしょ
2017/12/31(日) 13:31:04.61ID:fsRyV04Q0
>>787
専用のソフトがなければ1sheetをマクロ関数管理用にして各関数内にver x.y.z(x変更で互換性無し、y変更で互換性あり、z変更は互換性ありバグ修正みたいにして)
モジュールをインポートしたファイルをオープン時に、イベント検知で所定の管理ファイルを検索、新しいバージョンがあれば自動で今までのモジュールを解放、y,zバージョンが最新のファイルをインポート
みたいにすれば実現可能そうですが結構手間がかかりそうで…
2017/12/31(日) 13:56:42.14ID:hllNi94Va
マクロで書けよ。
バージョン管理。

セキュリティが低下するけどな。
791デフォルトの名無しさん (ワッチョイ 0f03-vlH/)
垢版 |
2017/12/31(日) 18:06:59.07ID:nOUozIFo0
そもそも論として、たかがマクロでバージョン管理が必要になるような力作()作るなよw
キミたちは一体エクセルマクロで何を築こうとしておるのかねw
2017/12/31(日) 18:13:51.04ID:2b4EaTgg0
仕事でVBA扱ってると色々な理由から小さいマクロでもバージョン管理が必要になってくる。
2017/12/31(日) 19:27:51.32ID:rNrttlhS0
>>791
内容がぐちゃぐちゃになったら困るものにはバージョン管理が必要さ
力作()でなくても再構築はかったるいからな
794デフォルトの名無しさん (ワッチョイ 0f03-vlH/)
垢版 |
2017/12/31(日) 19:58:25.49ID:nOUozIFo0
>>793
力作()じゃないのにぐちゃぐちゃになるってどんだけ当てずっぽうにマクロ書いてんだよw
2017/12/31(日) 20:00:31.71ID:pVPyHW7p0
社内に展開するとかでサポートが必要ならバージョン管理ぐらいは必須だろ
>>791は無知すぎ
796デフォルトの名無しさん (ワッチョイ 0f03-vlH/)
垢版 |
2017/12/31(日) 20:24:53.68ID:nOUozIFo0
>>795
確かにおまえらの考える事は見当もつかんけどなw
別にいいや無能思考に明るくならなくてもw
2017/12/31(日) 20:28:42.31ID:1PdKj8Yj0
またメゾット君か。
2017/12/31(日) 20:42:44.41ID:rRjJbr8wx
メゾット君って雰囲気ですぐ分かるよね
2017/12/31(日) 20:54:32.08ID:KnonKKai0
OLDフォルダにファイル名の後に日付つけたファイルをコピーしてる
2017/12/31(日) 21:20:00.26ID:A+5By6dM0
ていうかバイナリファイルをバージョン管理システムに登録したところで
単なる時系列バックアップにしかならんうえに
シートを更新しただけでバージョンが変わるから意味ないのでは
2017/12/31(日) 22:37:10.58ID:rNrttlhS0
力作2.0
802デフォルトの名無しさん (ワッチョイ 8aa4-ycq7)
垢版 |
2017/12/31(日) 22:50:02.43ID:InzisC8s0
悩みはみんな一緒なんだね。俺はバージョンアップに悩んでアドイン化したが
これはこれで悩ましいところがあるんだな。シートを初期化(つまりClearとかClearContents)する
のにもよーく考えないと結構危ない。アドインはどのブックでも実行出来てしまうからPCに疎いヤツが使うのも考えると
別の方法を考えた方が良いんだろうかとか考えてる。
2017/12/31(日) 22:55:00.56ID:rNrttlhS0
>>802
アドインてxlamのこと?
だったらそのシートは一切使っちゃダメだよ
プログラムモジュールだけの存在にするべき
804デフォルトの名無しさん (ワッチョイ 8aa4-ycq7)
垢版 |
2017/12/31(日) 23:12:43.15ID:InzisC8s0
>>803
そりゃ分かってるての。ブックを指定する時は「ActiveWorkBook」とするしかない(決めつけはよくないが)
からよーく考えてコードを書かないと危ない場合もあるって話。使う連中の9割はマクロどころかシート関数も
知らないような連中なんだから。
2017/12/31(日) 23:41:30.90ID:rNrttlhS0
>>804

・処理をスタートするFunction や Subはアドイン側にはない。当該Book側にある
・そのFunction や Subがアドイン側の機能を使う

だとするとアドイン側に「ActiveworkBook」なんて書く必要はなくて、処理対象のSheetやRangeを
引数で受け取るだけになると思うんだがね
806デフォルトの名無しさん (ワッチョイ 8aa4-ycq7)
垢版 |
2017/12/31(日) 23:52:05.59ID:InzisC8s0
>>805
作業するBookはxlsxなんだよ。マクロはxlms側に書いてある。

なんでこうしたかというと、仕事柄、ブックは地方自治体に提出する場合があるから。

何の事かわからないだろうからもうちょっと書くと、測量データの野帳なんだよ。
807806 (ワッチョイ 8aa4-ycq7)
垢版 |
2017/12/31(日) 23:53:24.81ID:InzisC8s0
xlmsじゃねえや、xlamだな。
808デフォルトの名無しさん (JP 0H27-GXwu)
垢版 |
2018/01/01(月) 04:27:25.57ID:WDGj6QXoH
>>806
マクロ有効ブックから
マクロ無効ブックを開いて処理して保存して閉じる
という方法も有ると思う
2018/01/01(月) 09:37:05.14ID:hnfikatx0
自動処理したいなら>>808だろうし、操作者が開いて何かしたいならメニューに追加しとけばいいだけだと思う
>>806は無知なのかちょっと頭固いんだろうな
810デフォルトの名無しさん (JP 0H27-QCE3)
垢版 |
2018/01/01(月) 13:40:19.53ID:iV2QIiO7H
>>809
作業ブック側にコード書けないんだよ。知ったかすんなよボケ
2018/01/01(月) 13:55:03.62ID:7v1CUCWaM
>>810
作業ブックにコードなんか要らんだろ w
知らないなら黙ってろ
てか、アドインでメニュー追加なんて基本中の基本だと思うが
http://toshimana.hatenablog.com/entry/2014/01/26/204938
2018/01/01(月) 14:25:45.74ID:7yffOGmB0
知らないことを素直に知らないと言いなさい
2018/01/01(月) 14:27:07.60ID:tZ/lpIQo0
今年はいい年になるかなw
2018/01/01(月) 14:29:26.10ID:UomJiKNZ0
>>811
Workbook_AddinUninstall てのは知らなかったな。
Workbook_Open するのと効果は違うんだろうか?
2018/01/01(月) 14:54:13.21ID:ixsE+qrMx
またメゾット君が暴れてるな
あの馬鹿が出入りするようになってから荒れすぎ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況