vba界面做一个保存按钮,保存cad文件

Barry张 2014-04-25 09:21:47
Private Sub cb_save_Click()
If cb_page.Text = "选择页" Then
MsgBox "未选择要存盘的页!", vbExclamation + vbOKOnly + vbApplicationModal, "警告"
Else
If cb_zoom.Caption = "全页显示(W)" Then

Call cb_zoom_Click
End If
Dim SAVENAME As String
With comd
' .DialogTitle = "另存为对话框"
.InitDir = "d:\"
.Filter = "AutoCAD 2014 图形(*.dwg)"


End With
again:
comd.ShowSave
SAVENAME = comd.FileName
If SAVENAME <> "" Then
Dim retn As String
Dim IsC As Integer
retn = Dir(SAVENAME, vbNormal)
If retn <> "" Then
IsC = MsgBox("该文件名已存在,是否覆盖?", vbExclamation + vbYesNo, "警告")
If IsC = 6 Then
AcadApplication.ActiveDocument.Activate
AcadApplication.ActiveDocument.SaveAs SAVENAME
Err.Clear
i = Mid(cb_page.Text, 3, 1)
ASavename(i) = SAVENAME
Else
comd.FileName = ""
GoTo again
End If
Else
AcadApplication.ActiveDocument.Activate
AcadApplication.ActiveDocument.SaveAs SAVENAME
Err.Clear
ASavename(i) = SAVENAME
End If
Else
Exit Sub
End If
End If
End Sub
一个按钮点击后,能出现另存为的界面,保存文件,可是运行到 .InitDir = "d:\"出错,提示要求对象,我试了下commondialog控件,可是移到窗体上时说不支持,我已经引用了comdlg32.ocx,不知道是不是系统问题,还是别的问题,求解
...全文
1479 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2015-05-28
  • 打赏
  • 举报
回复
先没注意到你在后面说了“”不支持,不过应该是你的系统原因吧。 这是刚才写的用API操作的代码,我在 Win7/32位专业版+VB6.0 运行没有问题。
' 调用示例:
Option Explicit

Private Sub Command1_Click()
   Dim strTemp As String
   
   If (0& = ShowOpen(0, strTemp, , "文本文件(*.txt)|*.txt,所有文件(*.*)|*.*")) Then
      MsgBox strTemp, 64
   Else
      MsgBox "取消操作。", 64
   End If
End Sub

Private Sub Command2_Click()
   Dim strTemp As String
   
   If (0& = ShowSave(0, strTemp, , "文本文件(*.txt)|*.txt,所有文件(*.*)|*.*")) Then
      MsgBox strTemp, 64
   Else
      MsgBox "取消操作。", 64
   End If
End Sub
' 接口函数代码
Option Explicit

Private Declare Function GetOpenFileName _
                  Lib "Comdlg32" Alias "GetOpenFileNameW" _
                        (pOpenfilename As OPENFILENAME) As Long
Private Declare Function GetSaveFileName _
                  Lib "Comdlg32" Alias "GetSaveFileNameW" _
                        (pOpenfilename As OPENFILENAME) As Long

Private Type OPENFILENAME
    lStructSize      As Long
    hWndOwner        As Long
    hInstance        As Long
    lpstrFilter      As Long
    lpstrCustFilter  As Long
    nMaxCustFilter   As Long
    nFilterIndex     As Long
    lpstrFile        As Long
    nMaxFile         As Long
    lpstrFileTitle   As Long
    nMaxFileTitle    As Long
    lpstrInitialDir  As Long
    lpstrTitle       As Long
    Flags            As Long
    nFileOffset      As Integer
    nFileExtension   As Integer
    lpstrDefExt      As Long
    lCustData        As Long
    lpfnHook         As Long
    lpTemplateName   As Long
End Type

Private Const OFN_READONLY          As Long = &H1     '只读打开为选中
Private Const OFN_HIDEREADONLY      As Long = &H4     '隐藏只读打开
Private Const OFN_OVERWRITEPROMPT   As Long = &H2     '覆盖时提示
Private Const OFN_ALLOWMULTISELECT  As Long = &H200   '多个选中
Private Const OFN_EXPLORER          As Long = &H80000 '资源管理器

Private arrCustData(15) As Long
Private mlInitFlag   As Long



Public Function ShowOpen(ByVal hWndOwner As Long, FileOpen As String, _
                        Optional Title As String = "打开文件:", _
                        Optional Filter As String = "所有文件(*.*)|*.*", _
                        Optional FilterIndex As Long = 1&, _
                        Optional StartDir As String = vbNullChar, _
                        Optional Flags As Long = OFN_HIDEREADONLY) As Long
      Dim OpenFN  As OPENFILENAME
      Dim strFilt As String
      Dim strName As String
      Dim strDir  As String
      Dim p&

   strName = String$(256&, 0)
   strDir = strName
  'strFilt = "所有文件(*.*)|*.*,文本文件(*.txt)|*.txt" & vbNullChar & vbNullChar
   strFilt = Replace(Replace(Filter & vbNullChar, "|", vbNullChar), ",", vbNullChar)
  'OpenFN.lStructSize = Len(OpenFN)
   OpenFN.lStructSize = 76&
   OpenFN.hWndOwner = hWndOwner
   'OpenFN.hInstance = App.hInstance
   OpenFN.hInstance = 0&
   OpenFN.lpstrTitle = StrPtr(Title)
   OpenFN.lpstrFilter = StrPtr(strFilt)
   OpenFN.nFilterIndex = FilterIndex
   OpenFN.lpstrInitialDir = StrPtr(StartDir)
   OpenFN.lpstrFile = StrPtr(strName)
   OpenFN.nMaxFile = 255
   OpenFN.lpstrFileTitle = StrPtr(strDir)
   OpenFN.nMaxFileTitle = 255
   OpenFN.Flags = Flags
   If (GetOpenFileName(OpenFN)) Then
      p = InStr(1&, strName, vbNullChar)
      FileOpen = Left$(strName, (p - 1&) And (p > 0&))
      ShowOpen = 0&
   Else
      ShowOpen = -1&
   End If
End Function

Public Function ShowSave(ByVal hWndOwner As Long, FileSave As String, _
                        Optional Title As String = "保存文件:", _
                        Optional Filter As String = vbNullChar & vbNullChar, _
                        Optional FilterIndex As Long = 0, _
                        Optional StartDir As String = vbNullChar, _
                        Optional Flags As Long = OFN_HIDEREADONLY Or OFN_OVERWRITEPROMPT) As Long
      Dim SaveFN As OPENFILENAME
      Dim strFilt As String
      Dim strName As String
      Dim strTemp As String
      Dim p    As Long

   strName = String$(264&, 0)
   strTemp = strName
   strFilt = Replace(Replace(Filter & vbNullChar, "|", vbNullChar), ",", vbNullChar)
   SaveFN.lStructSize = 76&
   SaveFN.hWndOwner = hWndOwner
   'SaveFN.hInstance = App.hInstance
   SaveFN.hInstance = 0&
   SaveFN.lpstrTitle = StrPtr(Title)
   SaveFN.lpstrFilter = StrPtr(strFilt)
   SaveFN.nFilterIndex = 0&
   SaveFN.lpstrInitialDir = StrPtr(StartDir)
   SaveFN.lpstrFile = StrPtr(strName)
   SaveFN.nMaxFile = 256&
   SaveFN.lpstrFileTitle = StrPtr(strTemp)
   SaveFN.nMaxFileTitle = 256&
   SaveFN.Flags = Flags
   If GetSaveFileName(SaveFN) Then
      p = InStr(1&, strName, vbNullChar)
      FileSave = Left$(strName, (p - 1&) And (p > 0&))
      ShowSave = 0&
   Else
      ShowSave = -1&
   End If
End Function
舉杯邀明月 2015-05-28
  • 打赏
  • 举报
回复
引用 1 楼 zxs11289 的回复:
这个已经不再支持 可以使用API
谁告诉你的这个“再不支持”???
舉杯邀明月 2015-05-28
  • 打赏
  • 举报
回复
你的那个VBA窗口中,没有添加名为 comd 的 CommonDialog(通用对话框)对象。 在控件工具箱中,点鼠标右键,添加“部件”,找到: Microsoft Common Dialog Control 6.0 (SP6)     或者“浏览……”,在 System32 中找到 COMDLG32.ocx ,打开它。
KKK56390bar 2015-05-28
  • 打赏
  • 举报
回复
请帮忙举例说明一下怎么使用API打开一个文件返回文件名
zxs11289 2014-05-23
  • 打赏
  • 举报
回复
这个已经不再支持 可以使用API

2,506

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧