Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4790|回复: 13

[已解决]工作表名称写入用户窗体上的VBA

[复制链接]
发表于 2017-5-28 15:47 | 显示全部楼层 |阅读模式
本帖最后由 安全网 于 2017-6-2 17:18 编辑

Private Sub UserForm_Initialize()
Dim fp$
fp = "D:\标准数据库\"
Call searfile(fp, ".xls")
[a1].Resize(r, 1) = Application.Transpose(Arr1)
End Sub

Sub searfile(fp As String, fkey As String)
Dim fm, r&
If Right(fp, 1) <> "" Then fp = fp & ""
If Len(fkey) < 1 Then fkey = ".xls"
fm = Dir(fp, vbDirectory)
Do While fm <> ""
    If fm <> "." And fm <> ".." Then
        If InStr(fm, fkey) Then
            r = r + 1
            ReDim Preserve Arr1(1 To r)
            Arr1(r) = fp & fm
        End If
    End If
    fm = Dir
Loop
End Sub
求助将文件夹内的所有工作薄名称写入Me.ComboBox1.AddItem 的VBA代码修正
最佳答案
2017-6-2 14:52
原代码里存在2个问题:
1、全局变量r定义过后,在那个子程序里重复定义,造成r的参数传递不对
2、arr1没有定义,需初始定义全局数组 dim arr1()。然后在子程序里redim preserve就不会出错了。

D盘文件.rar

689.21 KB, 下载次数: 20

 楼主| 发表于 2017-6-1 08:00 | 显示全部楼层
回复

使用道具 举报

发表于 2017-6-1 12:00 | 显示全部楼层
searfile函数内,DO LOOP循环后面加入一行代码:ComboBox1.list=arr1
如果你不想包含路径,那么在searfile函数内再加一个数组,直接用fm赋值,然后一次赋值给ComboBox1就行了。
附件没看,你可以自己试下。
回复

使用道具 举报

 楼主| 发表于 2017-6-1 12:48 | 显示全部楼层
大灰狼1976 发表于 2017-6-1 12:00
searfile函数内,DO LOOP循环后面加入一行代码:ComboBox1.list=arr1
如果你不想包含路径,那么在searfile ...

代码还是运行不了,说这句的变单未设置  ReDim Preserve arr1(1 To r)
回复

使用道具 举报

发表于 2017-6-1 13:32 | 显示全部楼层
不能直接ReDim Preserve arr1(1 To r)
在声明变量下面加上一句ReDim arr1(1 To 1)就可以了
例:
Sub searfile(fp As String, fkey As String)
Dim fm, r&
ReDim arr1(1 To 1)
。。。。
回复

使用道具 举报

 楼主| 发表于 2017-6-1 13:56 | 显示全部楼层
大灰狼1976 发表于 2017-6-1 13:32
不能直接ReDim Preserve arr1(1 To r)
在声明变量下面加上一句ReDim arr1(1 To 1)就可以了
例:

具体的还是麻烦帮忙看看,运行还是出错
回复

使用道具 举报

发表于 2017-6-2 10:19 | 显示全部楼层
你代码里有很多汉字,我的系统会识别成乱码,打开文件就报错。
回复

使用道具 举报

 楼主| 发表于 2017-6-2 10:53 | 显示全部楼层
大灰狼1976 发表于 2017-6-2 10:19
你代码里有很多汉字,我的系统会识别成乱码,打开文件就报错。

那怎么样弄这个代码了?能否重新帮忙写一个简单的了?
回复

使用道具 举报

 楼主| 发表于 2017-6-2 14:41 | 显示全部楼层
大灰狼1976 发表于 2017-6-2 10:19
你代码里有很多汉字,我的系统会识别成乱码,打开文件就报错。

里面的字不影响代码吧
回复

使用道具 举报

发表于 2017-6-2 14:52 | 显示全部楼层    本楼为最佳答案   
原代码里存在2个问题:
1、全局变量r定义过后,在那个子程序里重复定义,造成r的参数传递不对
2、arr1没有定义,需初始定义全局数组 dim arr1()。然后在子程序里redim preserve就不会出错了。

拆单旧款表1.rar

266.4 KB, 下载次数: 23

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-3-28 19:10 , Processed in 0.470179 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表