【お知らせ】カテゴリの見直しについて

質問させて下さい。

Lhaplus などを使用(導入)することなく、Windows7の標準機能のみでExcelファイルをZipファイルに圧縮する事は可能なのでしょうか?

マクロの動作としては、
1.作業中のBOOKから必要なシートのみをコピーし別BOOKとして保存
2.別BOOKとして保存したファイルを、同一フォルダ内にZipファイルとして圧縮
3.別BOOKを削除

上の1.と3.は出来たのですが、
2.の圧縮についてが、理解できずにおります。
自分なりに調べたところ、Lhaplus をShell関数などで指定し圧縮をする方法などは紹介されていたのですが、Windows7の標準機能のみZip圧縮を行う事は可能なのでしょうか?

ご存知の方がいましたら、ご教授いただければ幸いです。

このQ&Aに関連する最新のQ&A

zip」に関するQ&A: 圧縮 zip

A 回答 (3件)

こんにちは。



>2.別BOOKとして保存したファイルを、同一フォルダ内にZipファイルとして圧縮
というのは、2007以降のOffice ファイルは、拡張子が変わっただけで、本来は、Zipファイルなのです。あえて、Zipで圧縮する必要があるか分かりませんが、アーカイブに格納ということで、やってみました。

#2さんのリンク先とは、仕組み自体は同じですが、
Set Shell = CreateObject("Shell.Application")
zFolder.CopyHere sFolderItem
で、ZIPフォルダが認識しないことでした。そこで、何度もやった結果、事前に参照設定することで解決しました。

'//
Sub Files2Zip()
  Dim myPath As String
  Dim ZipFName As String
  Dim ZipFNameB As String
  Dim FName As Variant
  '要参照設定
  'Microsoft Shell Controls and Automation
  Dim objShell As Shell32.Shell 'レイトバインディングだと抜けがあります。
  Dim ar As Variant, fn As String
  Dim i As Long, j As Long, k As Long
  myPath = ThisWorkbook.Path & "\" '任意の場合は、必ず末尾に¥を入れること
  
  ZipFNameB = myPath & "MyFilesABC" ' & ".zip" "圧縮名
  ZipFName = ZipFNameB & ".zip"
  
  '一意の出力ファル名の決定
  fn = Dir(ZipFName & ".zip")
  Do Until fn = ""
   k = k + 1
   ZipFName = ZipFNameB & CStr(k) & ".zip"
   fn = Dir()
  Loop
  
  FName = Application.GetOpenFilename(FileFilter:="Excel Files (*.xl*), *.xl*", _
          MultiSelect:=True, Title:="圧縮ファイル選択")
  If IsArray(FName) = False Then
    Exit Sub
  Else
    Open ZipFName For Output As #1
    Print #1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String(18, 0)
    Close #1
   
    Set objShell = New Shell32.Shell
    For i = LBound(FName) To UBound(FName)
      If IsBookOpen(FName(i)) = False Then
       'ファイルは必ず閉じた状態で使ってください 'ここで問題が発生することがある
        objShell.Namespace(ZipFName).CopyHere FName(i)
        Sleep 500
      End If
    Next i
  End If
End Sub
Function IsBookOpen(ByVal FName As Variant)
Dim myFno As Integer
If Dir(FName) <> "" Then
 myFno = FreeFile
 On Error Resume Next
 Open FName For Binary Lock Read Write As #myFno
 Close #myFno
End If
 If Err.Number = 70 Then
  IsBookOpen = True
 End If
End Function
'//
    • good
    • 2
この回答へのお礼

ありがとうございます。
また、お礼が非常に遅くなり申し訳ございませんでした。
上記コードで問題なくwin7Excel2007で実行できました。

Print など使用した事のないステートメントや、
アーリーバインディング・レイトバインディングの違い。sleepとwaitの違いについても不勉強でしたので、これも含めて勉強していきたいと思います。

本当にありがとうございました。

お礼日時:2015/08/10 03:01

こちらでは?


http://scripting.cocolog-nifty.com/blog/2007/11/ …

Windows7 64bit & Office2010 32bit で確認済み。
    • good
    • 0
この回答へのお礼

ありがとうございます。
また、お礼が非常に遅くなり申し訳ございませんでした。

この件だけでなく、これから学んでいきたい事が非常に多く掲載されており、
非常に参考になりました。

本当にありがとうございました。

お礼日時:2015/08/10 03:04

標準かわかりませんが、私のWin7では、


 右クリック - 送る - 圧縮(ZIP)フォルダー 
でZip圧縮を行う事は可能ですよ。
    • good
    • 2
この回答へのお礼

ありがとうございます。
お礼が非常に遅くなり申し訳ございませんでした。

お礼日時:2015/08/10 03:06

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBAからファイルをzip化したい

エクセルVBAにより、外部にあるファイル(テキストファイル)をzip圧縮したいのですが、何か方法は無いものでしょうか。

先人の知恵をお貸しいただければ大変助かります。

Aベストアンサー

こんにちは。

Google 検索もしてみましたが、Excel VBAでは、あまり良いものがないようですね。あくまでも、VBAの処理ですから、それはそれなりにしたほうがよいですね。

Zip32j が必要です。
http://www.vector.co.jp/soft/win95/util/se062163.html

当然、Zip32.dll は入っているものと見なします。なお、以下は簡易な方法です。

ただ、ファイルネームが、ショートネームしか受けないようなので、そのまま、GetOpenFilename ダイアログでは、ロングネームで、Zip32側が、エラーを起こしてしまいます。

もし、本格的にお使いになるのなら、実際には、Shell.Application のショートネームプロパティなどをお使いになるとよいでしょう。

うまくいかなかったら、Debug.Print のコメント・ブロックを外して、イミディエイトウィンドウで、その内容を確認してください。

それから、詳しいコマンドは、Zip32jの中の、CMD_ZIP.TXT を確認してください。一番、コマンドの説明が分かりやすいです。

'標準モジュール
'Option Explicit
Private Declare Function Zip Lib "Zip32j" (ByVal hWnd As Integer, ByVal szCmdLine As String, ByVal szOutPut As String, ByVal dwsize As Integer) As Integer
Private Declare Function FindWindow Lib "USER32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Sub testZip()
'Zip32 による圧縮
 Dim Filename As String
 Dim strArchiveName As String
 Dim strCommand As String
 Dim RC As Long
 Dim hWnd As Long
 Dim strOutPut As String * 512
 Dim lngSize As Long

 'ハンドル取得
 hWnd = FindWindow("XLMANI", Application.Caption)
 
 'ファイル名取得
 Filename = Application.GetOpenFilename("テキストファイル*.txt(*.txt),*.txt")
 
 If Filename = "False" Then Exit Sub
 Filename = Mid$(Filename, InStrRev(Filename, "\") + 1)
 strArchiveName = Mid$(Filename, InStrRev(Filename, "\") + 1, InStrRev(Filename, ".") - InStrRev(Filename, "\") - 1) & ".zip"
 strCommand = "-u " & strArchiveName & " " & Filename
 lngSize = Len(strOutPut)
 RC = Zip(hWnd, strCommand, strOutPut, lngSize)
 'Debug.Print strOutPut
End Sub

こんにちは。

Google 検索もしてみましたが、Excel VBAでは、あまり良いものがないようですね。あくまでも、VBAの処理ですから、それはそれなりにしたほうがよいですね。

Zip32j が必要です。
http://www.vector.co.jp/soft/win95/util/se062163.html

当然、Zip32.dll は入っているものと見なします。なお、以下は簡易な方法です。

ただ、ファイルネームが、ショートネームしか受けないようなので、そのまま、GetOpenFilename ダイアログでは、ロングネームで、Zip32側が、エラーを起こしてしまいま...続きを読む

QVBA zipファイルの作成

(1)作業環境
Windows 7 Professional SP1
Intel(R) Core(TM) i3­3240 CPU @ 3.40GHz 4.00GB
32ビットオペレーティングシステム
Microsoft Office Standard 2010
Excel ver.14


(2)やりたいこと
3つのファイルのzipファイルを同じフォルダに作成したい
  C:\temp\a.txt
  C:\temp\b.txt
  C:\temp\c.txt
  から
  C:\temp\d.zip
  を作りたい。


(3)状況
下記サイトを参照しましたが知識不足で正確にわからないのと、『本当にこんなに長いコードが必要なのか?』と疑問に思っています。

 参考①VBAでZIP圧縮する。
 http://scripting.cocolog-nifty.com/blog/2007/11/vbazip_a144.html

 参考②ファイル/フォルダをzipファイルに圧縮
 http://qiita.com/kou_tana77/items/72346c69107fabf99335

定義、ループ、分岐など基本的なことは分かっています。
APIやFSOなども詳しくはないですが、知っています。
たとえば①の「fso.*******」、「Shell.*******」などの、*******が分かりません。


(4)質問事項
余計なものは除いて必要最低限のコードだけにするとどのようになるかしりたいです。
※エラー処理などに関しては使用環境にあわせて作成します。


ご存じの方ご教示くださいm(_ _)m

(1)作業環境
Windows 7 Professional SP1
Intel(R) Core(TM) i3­3240 CPU @ 3.40GHz 4.00GB
32ビットオペレーティングシステム
Microsoft Office Standard 2010
Excel ver.14


(2)やりたいこと
3つのファイルのzipファイルを同じフォルダに作成したい
  C:\temp\a.txt
  C:\temp\b.txt
  C:\temp\c.txt
  から
  C:\temp\d.zip
  を作りたい。


(3)状況
下記サイトを参照しましたが知識不足で正確にわからないのと、『本当にこんなに長いコードが必要なのか?』と疑問に思ってい...続きを読む

Aベストアンサー

こんな感じでしょうか?
・既に圧縮書庫ファイルが存在する場合は上書きされます。
・指定した被圧縮ファイルが存在しなかった場合はハングアップします。

-----------------------------
Sub MakeZip()
Dim sfo As Object, app As Object
Set sfo = CreateObject("Scripting.FileSystemObject")
Set app = CreateObject("Shell.Application")

Dim zipFolder As Object
Dim file As Variant
Dim count As Long

Const zipFile = "C:\excel\圧縮.zip" '圧縮書庫ファイルの絶対パス
Dim files As Variant
files = Array("C:\excel\あ.txt" _
, "C:\excel\い.txt" _
, "C:\excel\う.txt") ' 圧縮するファイルの絶対パス

'空のzipファイルを作成する
With sfo.CreateTextFile(zipFile, True)
.Write "PK" & Chr(5) & Chr(6) & String(18, 0)
.Close
End With
Set zipFolder = app.Namespace(sfo.GetAbsolutePathName(zipFile))

'zipファイルに圧縮対象のファイルをコピーする
count = 0
For Each file In files
count = count + 1
zipFolder.CopyHere (sfo.GetAbsolutePathName(CStr(file)))
'このファイルのコピーが終わるまで待つ。
Do Until zipFolder.Items().count = count
Application.Wait Now + TimeSerial(0, 0, 1)
Loop
Next
Set sfo = Nothing
Set app = Nothing
Set zipFolder = Nothing
End Sub

こんな感じでしょうか?
・既に圧縮書庫ファイルが存在する場合は上書きされます。
・指定した被圧縮ファイルが存在しなかった場合はハングアップします。

-----------------------------
Sub MakeZip()
Dim sfo As Object, app As Object
Set sfo = CreateObject("Scripting.FileSystemObject")
Set app = CreateObject("Shell.Application")

Dim zipFolder As Object
Dim file As Variant
Dim count As Long

Const zipFile = "C:\excel\圧縮.zip" '圧縮書庫ファイルの絶...続きを読む

Q[VBA]標準機能のみでパス付zipファイルの解凍

いつもこちらの識者の皆様にはお世話になっております。
VBAのことで質問させてください。

環境はwindows7 Pro
Excel2010(14.0.7128.5000) 32bit
です。

掲題のとおり、パスワード付のzipファイルを解凍しいたいのですが、調べてもやり方が分からず困っています。

■やりたいこと
外部アプリケーションを使わずにWindows7の標準機能のみで"C:\aaa\bbb.zip"をパスワード"111"で解凍する

会社で使っているのですが、アプリケーションのインストールが禁止されており、
毎日複数のパスワード付zipファイルを手動で解凍して処理をしています。
効率を考えVBAで処理したいのですが、どなたか上記内容の場合どのようなコードが適しているか
教えていただけませんでしょうか。
よろしくお願いいたします。

Aベストアンサー

こんばんは。
>>ついでに、その掲示板の質問者さんは、・・・
>実はこの質問も僕なんです。
失礼しました。気が付きませんでした。(^^;

>zipfldr.dllで圧縮・解凍処理をしてるんですね。
これが、私には使いこなせなかったのです。それで、試行錯誤の上、結局、Shell.Application で任せてしまいました。(おそらく、古い環境では動きません)

>ひとまず単一のパス付きzipファイルを解凍するコードをご教示いただければありがたいです。
実に、へんてこなコードですが、試してみてください。こちらの環境ではうまくいきましたが、他人の環境では、失敗する可能性が結構あります。Sendkeyは、Win32 API関数の方が確実ですが、仰々しくなってしまいます。


'//
Sub OneZipExtract()
 Dim fn As Variant
 Dim DestFolder As Variant
 Dim objZip As Variant
 '出来る限り、VBEditor は閉じていたほうがSendkeyの誤動作から免れます。
 Const PSWD As String = "000" 'パスワード
 DestFolder = "C:\aaa\" '展開フォルダ 末尾は、¥(セパレータ)を置くようにしてください。
 
' fn = Application.GetOpenFilename("ZIPファイル*.zip(*.zip),*.zip")
' If VarType(fn) = vbBoolean Then Exit Sub
 fn ="C:\aaa\bbb.zip"  'キメウチ・ファイル名
 ' DestFolder = Mid(fn, 1, InStrRev(fn, "\")) '展開ファルダが、ZIPファイルのある場所の場合
 Set objShell = CreateObject("Shell.Application")
 Set objZip = objShell.Namespace(fn).Items
 Application.SendKeys PSWD & "{Enter}"
 objShell.Namespace(DestFolder).CopyHere (objZip) '*
 Set objShell = Nothing
End Sub
'//

*確実にZIPファイルが展開できたかは、このようにすると良いです。
 ret = objShell.Namespace(DestFolder).CopyHere(objZip)
 If ret > 0 Then
   MsgBox "失敗しました。", 48
 End If

こんばんは。
>>ついでに、その掲示板の質問者さんは、・・・
>実はこの質問も僕なんです。
失礼しました。気が付きませんでした。(^^;

>zipfldr.dllで圧縮・解凍処理をしてるんですね。
これが、私には使いこなせなかったのです。それで、試行錯誤の上、結局、Shell.Application で任せてしまいました。(おそらく、古い環境では動きません)

>ひとまず単一のパス付きzipファイルを解凍するコードをご教示いただければありがたいです。
実に、へんてこなコードですが、試してみてください。こちらの環境ではうま...続きを読む

QZIPファイルの作成をコマンドから行いたい

Windows2003やXPでは、ファイルの右クリック→圧縮で
ZIPファイルを作成することが可能ですが、
これをコマンドから実行することは可能なのでしょうか?
可能ならば、どう書けばよいでしょうか…。

よろしくお願いいたします。

Aベストアンサー

> これをコマンドから実行することは可能なのでしょうか?

標準のコマンドは存在しませんから、既存のDOSやWindowsで使われていたのと同じく、それ用のコマンドをダウンロードして使用します。

はてな - WindowsのコマンドラインやバッチファイルでlLZHやZIPファイルの展開を行いたいのですが、
Http://www.hatena.ne.jp/1105496465
(直接リンクは切っておきます)

などを参考に、LZH形式の例ですと、

LHA32
http://www.vector.co.jp/soft/win95/util/se347175.html

をダウンロード、D:\に展開します。

以下のように打ち込んで圧縮を行います。

D:\>lha32 a test.lzh README.1ST


ダウンロードしたものにreadmeやヘルプコマンドがあるハズなので、そちらを参考にして下さい。

--
あるいは、Lhacaなどはコマンドラインからの引数を受け付けています。

| ●圧縮
| C:¥Program Files¥Lhaca>Lhaca.exe ”c:¥icons”

この辺はソフト次第ですし、Lhacaにしても上の操作はサポート外だったハズ。

> これをコマンドから実行することは可能なのでしょうか?

標準のコマンドは存在しませんから、既存のDOSやWindowsで使われていたのと同じく、それ用のコマンドをダウンロードして使用します。

はてな - WindowsのコマンドラインやバッチファイルでlLZHやZIPファイルの展開を行いたいのですが、
Http://www.hatena.ne.jp/1105496465
(直接リンクは切っておきます)

などを参考に、LZH形式の例ですと、

LHA32
http://www.vector.co.jp/soft/win95/util/se347175.html

をダウンロード、D:\に展開...続きを読む

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Qエクセル マクロで指定フォルダを開く

エクセルにて
指定フォルダを開く、マクロがあれば教えて頂けないでしょうか。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

こういうものですか?
開くフォルダを変えたいときは targ に与えるパスを変更します。

Sub OpenFolders()
Dim targ As String
targ = "C:\"
Shell "C:\Windows\Explorer.exe " & targ, vbNormalFocus
End Sub

QVBAを使ってファイルを圧縮したい

こんばんは。

他の方の質問ですが
http://oshiete1.goo.ne.jp/qa2405614.html
を参考にVBAでエクセルファイルの圧縮に挑戦しています。

しかしうまくいきません。
なのでご教授お願いします。

エクセルの標準モジュールに
下記のコードを載せました。

////////////////////////////////////////////////////////////////////////
'Option Explicit
Private Declare Function Zip Lib "Zip32j" (ByVal hWnd As Integer, ByVal szCmdLine As String, ByVal szOutPut As String, ByVal dwsize As Integer) As Integer
Private Declare Function FindWindow Lib "USER32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Sub testZip()
'Zip32 による圧縮
Dim Filename As String
Dim strArchiveName As String
Dim strCommand As String
Dim RC As Long
Dim hWnd As Long
Dim strOutPut As String * 512
Dim lngSize As Long

'ハンドル取得
hWnd = FindWindow("XLMANI", Application.Caption)

'ファイル名取得
Filename = myDeskTopPath & "\Book1.xls"

If Filename = "False" Then Exit Sub
Filename = Mid$(Filename, InStrRev(Filename, "\") + 1)
strArchiveName = Mid$(Filename, InStrRev(Filename, "\") + 1, InStrRev(Filename, ".") - InStrRev(Filename, "\") - 1) & ".zip"
strCommand = "-u " & strArchiveName & " " & Filename
lngSize = Len(strOutPut)
RC = Zip(hWnd, strCommand, strOutPut, lngSize)
'Debug.Print strOutPut
End Sub


Function myDeskTopPath()
' 実行時の デスクトップパス取得
Dim MyWSH As Object
Set MyWSH = CreateObject("WScript.Shell")
myDeskTopPath = MyWSH.SpecialFolders("Desktop")
Set MyWSH = Nothing
End Function
////////////////////////////////////////////////////////////////////////

そして「Zip32j 」がないので
http://www.vector.co.jp/soft/win95/util/se062163.html
からダウンロードしました。

しかし、
「 RC = Zip(hWnd, strCommand, strOutPut, lngSize)」
の部分で、
「ファイルが見つかりません。 (Error 53)」
になります。

ダウンロードした「zip3j037」はフォルダごとデスクトップに置いています。
ただこれをダウンロードしただけではダメなのでしょうか?
エラーの原因がわかりません。

よろしくお願いします。

こんばんは。

他の方の質問ですが
http://oshiete1.goo.ne.jp/qa2405614.html
を参考にVBAでエクセルファイルの圧縮に挑戦しています。

しかしうまくいきません。
なのでご教授お願いします。

エクセルの標準モジュールに
下記のコードを載せました。

////////////////////////////////////////////////////////////////////////
'Option Explicit
Private Declare Function Zip Lib "Zip32j" (ByVal hWnd As Integer, ByVal szCmdLine As String, ByVal szOutPut As String, ByVal dwsize A...続きを読む

Aベストアンサー

こんばんは。
そのコードの作者です。すでに、もうご指摘がありますが、

>ダウンロードした「zip3j037」はフォルダごとデスクトップに置いています。

まず、以下に二つのファイルがなくてはなりません。

C:\WINDOWS\system32\ZIP32J.DLL <--- 今回、ダウンロードしたファイル
C:\WINDOWS\system32\zip32.dll <---- Zip解凍用の本体

ここをお読みください。
http://www.csdinc.co.jp/archiver/lib/zip32j.html
Common Archiver Library: ZIP32J.DLL

'-------------------------------------------
'ファイル名取得
Filename = myDeskTopPath & "\Book1.xls"

別に決まった内容なら、特に、問題はありませんが、

Filename = Application.GetOpenFilename("テキストファイル*.txt(*.txt),*.txt")
If Filename = "False" Then Exit Sub

この二行でセットになります。
後は、問題はないはずです。

こんばんは。
そのコードの作者です。すでに、もうご指摘がありますが、

>ダウンロードした「zip3j037」はフォルダごとデスクトップに置いています。

まず、以下に二つのファイルがなくてはなりません。

C:\WINDOWS\system32\ZIP32J.DLL <--- 今回、ダウンロードしたファイル
C:\WINDOWS\system32\zip32.dll <---- Zip解凍用の本体

ここをお読みください。
http://www.csdinc.co.jp/archiver/lib/zip32j.html
Common Archiver Library: ZIP32J.DLL

'-------------------------------------...続きを読む

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。

Qエクセル:マクロ「Application.CutCopyMode = False」って?

エクセルのマクロを記録していると

「Application.CutCopyMode = False」

というものがよく出てきますが、これは何でしょう?
どういう意味のものかわかりません。
削除しても差し支えないのもでしょうか?

Aベストアンサー

「Application.CutCopyMode = False」の前で
セルのコピー、または切り取りを行っていると思います。
これは、その操作(セルのコピー、または切り取り)を無効にしているだけです。
------------
Range("A1").Select
Selection.Copy ← これを無効にしている
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
------------
上記の場合であれば、「Application.CutCopyMode = False」を削除しても問題ありませんが、
以下の場合、貼り付け処理でエラーになります。
------------
Range("A1").Select
Selection.Copy
Range("A2").Select
Application.CutCopyMode = False
ActiveSheet.Paste ← ココでエラー
------------
ご自分で、セルをコピーしてみると分かると思いますが、コピーした範囲が点線で点滅されます。
「Application.CutCopyMode = False」をすると、
その点滅がなくなります。

「Application.CutCopyMode = False」の前で
セルのコピー、または切り取りを行っていると思います。
これは、その操作(セルのコピー、または切り取り)を無効にしているだけです。
------------
Range("A1").Select
Selection.Copy ← これを無効にしている
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
------------
上記の場合であれば、「Application.CutCopyMode = False」を削除しても問題ありませんが、
以下の場合、貼り付け処理でエラーになります。
------------
...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング