求助,如果用EXCEL函数获得指定工作簿的名称,另附10种通过VBA形式获得工作簿名的方法

时间:2021-04-26 09:38:43
如题,我现在写一个公式,想动态获取工作簿的名称如sheet1\sheet2等,还请各位高手赐教一下,非常感激。

详细说明:

    我要写的公式如下:
        =SUMPRODUCT('6月核减'!$F$2:$F$1000*ISNUMBER(FIND(A3,'6月核减'!$B$2:$B$1000))*('6月核减'!$E$2:$E$1000=C3))

    也就是说,我要动态获得“6月核减”这个工作簿名,因为这个是按月份来的,还有7月核减、8月核减....等


另附10种函数方法获取当前工作薄名!

定义名称法9种
1.=MID(GET.CELL(32),2,FIND("]",GET.CELL(32))-2)
2.=GET.WORKBOOK(16)
3.=GET.CELL(66)
4.=GET.DOCUMENT(88)
5.=MID(GET.DOCUMENT(1),2,FIND("]",GET.DOCUMENT(1))-2)
6.=MID(GET.DOCUMENT(76),2,FIND("]",GET.DOCUMENT(76))-2)
7.=MID(GET.WINDOW(1),2,FIND("]",GET.WINDOW(1))-2)
8.=MID(GET.WINDOW(30),2,FIND("]",GET.WINDOW(30))-2)
9.=MID(GET.CELL(62),2,FIND("]",GET.CELL(62))-2)
一种普通函数法
1.=MID(CELL("filename"),FIND("[",CELL("filename"))+1,FIND("]",CELL("filename"))-FIND("[",CELL("filename"))-1)

10 个解决方案

#1


for i=1 to 12
=SUMPRODUCT('" & i & "月核减'!$F$2:$F$1000*ISNUMBER(FIND(A3,'" & i & "月核减'!$B$2:$B$1000))*('" & i & "月核减'!$E$2:$E$1000=C3))

#2


引用 1 楼 li163 的回复:
VB code
for i=1 to 12
=SUMPRODUCT('" & i & "月核减'!$F$2:$F$1000*ISNUMBER(FIND(A3,'" & i & "月核减'!$B$2:$B$1000))*('" & i & "月核减'!$E$2:$E$1000=C3))



li163 你好,非常感谢你的回复

你的意思是只需将表格名称“6月核减”中的“6”换成【" & i & "】吗?  
前面的【for i=1 to 12】for循环语句是啥意思咧?这个公式我是要写到excel表格中的喔。不是vba形式

#3


不是vba 求助,如果用EXCEL函数获得指定工作簿的名称,另附10种通过VBA形式获得工作簿名的方法

#4


额,我按你的方法将“6”换成【" & D6 & "】,行不通喔.直接出现#REF!值了。没有加 【for i=1 to 12】for循环语句.

#5


将“6”换成【" & D6 & "】  就是字符串拼接操作吧?呵呵

#6


不要用循环了,你根据什么来变化?比如我根据数据(单元格里的月份),也可以根据单元格的信息来变化

#7


'6月核减'
***********
这个到底是工作簿还是工作表?

#8


引用 7 楼 li163 的回复:
'6月核减'
***********
这个到底是工作簿还是工作表?



是工作表sheet!!!!

#9


Option Explicit

'窗体Form1上放一个列表框List1,一个命令按钮Command1,一个通用对话框CommonDialog1
'引用对象库Microsoft Excel 11.0 Object Library
Dim xlExcel As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

Private Sub Command1_Click()
    On Error GoTo Errhandler
    CommonDialog1.Filter = "Excel(*.xls) |*.xls|AllFile(*.*)|*.*"
    CommonDialog1.FilterIndex = 1
    CommonDialog1.ShowOpen
    Set xlExcel = New Excel.Application ' CreateObject("Excel.Application")
    xlExcel.Workbooks.Open CommonDialog1.FileName
    Set xlBook = xlExcel.Workbooks(CommonDialog1.FileTitle)
    List1.Clear
    For Each xlSheet In xlBook.Worksheets
        List1.AddItem xlSheet.Name
    Next
    Debug.Print xlBook.Worksheets.Count
Errhandler:
    xlBook.Close
    xlExcel.Quit
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlExcel = Nothing
End Sub

Private Sub Form_Load()
    Command1.Caption = "枚举Excel表中所有sheet表"
End Sub

#10


有直接用函数获得的不?

#1


for i=1 to 12
=SUMPRODUCT('" & i & "月核减'!$F$2:$F$1000*ISNUMBER(FIND(A3,'" & i & "月核减'!$B$2:$B$1000))*('" & i & "月核减'!$E$2:$E$1000=C3))

#2


引用 1 楼 li163 的回复:
VB code
for i=1 to 12
=SUMPRODUCT('" & i & "月核减'!$F$2:$F$1000*ISNUMBER(FIND(A3,'" & i & "月核减'!$B$2:$B$1000))*('" & i & "月核减'!$E$2:$E$1000=C3))



li163 你好,非常感谢你的回复

你的意思是只需将表格名称“6月核减”中的“6”换成【" & i & "】吗?  
前面的【for i=1 to 12】for循环语句是啥意思咧?这个公式我是要写到excel表格中的喔。不是vba形式

#3


不是vba 求助,如果用EXCEL函数获得指定工作簿的名称,另附10种通过VBA形式获得工作簿名的方法

#4


额,我按你的方法将“6”换成【" & D6 & "】,行不通喔.直接出现#REF!值了。没有加 【for i=1 to 12】for循环语句.

#5


将“6”换成【" & D6 & "】  就是字符串拼接操作吧?呵呵

#6


不要用循环了,你根据什么来变化?比如我根据数据(单元格里的月份),也可以根据单元格的信息来变化

#7


'6月核减'
***********
这个到底是工作簿还是工作表?

#8


引用 7 楼 li163 的回复:
'6月核减'
***********
这个到底是工作簿还是工作表?



是工作表sheet!!!!

#9


Option Explicit

'窗体Form1上放一个列表框List1,一个命令按钮Command1,一个通用对话框CommonDialog1
'引用对象库Microsoft Excel 11.0 Object Library
Dim xlExcel As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

Private Sub Command1_Click()
    On Error GoTo Errhandler
    CommonDialog1.Filter = "Excel(*.xls) |*.xls|AllFile(*.*)|*.*"
    CommonDialog1.FilterIndex = 1
    CommonDialog1.ShowOpen
    Set xlExcel = New Excel.Application ' CreateObject("Excel.Application")
    xlExcel.Workbooks.Open CommonDialog1.FileName
    Set xlBook = xlExcel.Workbooks(CommonDialog1.FileTitle)
    List1.Clear
    For Each xlSheet In xlBook.Worksheets
        List1.AddItem xlSheet.Name
    Next
    Debug.Print xlBook.Worksheets.Count
Errhandler:
    xlBook.Close
    xlExcel.Quit
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlExcel = Nothing
End Sub

Private Sub Form_Load()
    Command1.Caption = "枚举Excel表中所有sheet表"
End Sub

#10


有直接用函数获得的不?