INSERT INTO IMAGETABLE( IMAGENAME, IMAGEDATA )
SELECT ImageName, *
FROM OPENROWSET(BULK 'D:\Image.png', SINGLE_BLOB) rs
2015年7月31日星期五
TSQL - DBO.U_KillAllTasks
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[u_KillAllTasks]
( @Database nvarchar(200))
AS
BEGIN
SET @Database = REPLACE (@Database, ' ','')
SET @Database = ''''+REPLACE (@Database, ',',''',''')+''''
DECLARE @SCRIPT NVARCHAR(MAX);
DECLARE @spid INT;
DECLARE MyCursor CURSOR FOR
SELECT P.spid FROM SYS.sysprocesses P JOIN SYS.databases D ON P.dbid = D.database_id
WHERE D.name NOT IN ('MASTER','MODEL','MSDB','TEMPDB') AND P.spid <> @@SPID
--WHERE D.name IN (@Database)
--PRINT @Database
OPEN MyCursor;
-- Perform the first fetch and store the values in variables.
-- Note: The variables are in the same order as the columns
-- in the SELECT statement.
FETCH NEXT FROM MyCursor
INTO @spid;
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
-- Concatenate and display the current values in the variables.
SET @SCRIPT = 'KILL '+ LTRIM(STR(@spid))
PRINT @SCRIPT
EXEC ( @SCRIPT )
-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM MyCursor
INTO @spid;
END
CLOSE MyCursor;
DEALLOCATE MyCursor;
----------------------------------------------------------------
-- EXEC DBO.U_KillAllTasks @DATABASE='DATABASE01,DATABASE02,DATABASE03'
END
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[u_KillAllTasks]
( @Database nvarchar(200))
AS
BEGIN
SET @Database = REPLACE (@Database, ' ','')
SET @Database = ''''+REPLACE (@Database, ',',''',''')+''''
DECLARE @SCRIPT NVARCHAR(MAX);
DECLARE @spid INT;
DECLARE MyCursor CURSOR FOR
SELECT P.spid FROM SYS.sysprocesses P JOIN SYS.databases D ON P.dbid = D.database_id
WHERE D.name NOT IN ('MASTER','MODEL','MSDB','TEMPDB') AND P.spid <> @@SPID
--WHERE D.name IN (@Database)
--PRINT @Database
OPEN MyCursor;
-- Perform the first fetch and store the values in variables.
-- Note: The variables are in the same order as the columns
-- in the SELECT statement.
FETCH NEXT FROM MyCursor
INTO @spid;
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
-- Concatenate and display the current values in the variables.
SET @SCRIPT = 'KILL '+ LTRIM(STR(@spid))
PRINT @SCRIPT
EXEC ( @SCRIPT )
-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM MyCursor
INTO @spid;
END
CLOSE MyCursor;
DEALLOCATE MyCursor;
----------------------------------------------------------------
-- EXEC DBO.U_KillAllTasks @DATABASE='DATABASE01,DATABASE02,DATABASE03'
END
2015年7月30日星期四
TSQL - Concatenate many rows into a single text string
SELECT [MAIN].CASEID, LEFT([MAIN].INTCLASS, LEN([MAIN].INTCLASS)-1) AS INTCLASS
FROM (
SELECT CASEID, ( SELECT RIGHT('0'+Y.INTCLASS,2) + ',' AS [text()]
FROM DBO.HL_WRIGLEY_SPEC Y
WHERE X.CASEID = Y.CASEID
ORDER BY RIGHT('0'+Y.INTCLASS,2)
For XML PATH ('') ) AS INTCLASS
FROM DBO.HL_WRIGLEY_SPEC X
) [MAIN]
FROM (
SELECT CASEID, ( SELECT RIGHT('0'+Y.INTCLASS,2) + ',' AS [text()]
FROM DBO.HL_WRIGLEY_SPEC Y
WHERE X.CASEID = Y.CASEID
ORDER BY RIGHT('0'+Y.INTCLASS,2)
For XML PATH ('') ) AS INTCLASS
FROM DBO.HL_WRIGLEY_SPEC X
) [MAIN]
ToolBox - Create Views for SIG and EMP
USE ToolBox
CREATE VIEW SB_SIGEMP_ASIA
AS
SELECT O.DESCRIPTION AS OFFICE,
N1.NAMENO AS SIG_NAMENO, N1.NAMECODE AS SIG_NAMECODE, ISNULL(N1.FIRSTNAME+' ','')+ N1.NAME AS SIG_NAME,
N2.NAMENO AS EMP_NAMENO, N2.NAMECODE AS EMP_NAMECODE, ISNULL(N2.FIRSTNAME+' ','')+ N2.NAME AS EMP_NAME, COUNT(C.CASEID) AS CASECOUNT
FROM INPROASIA..OFFICE O
LEFT JOIN INPROASIA..CASES C ON C.OFFICEID = O.OFFICEID
LEFT JOIN INPROASIA..CASENAME CN1 ON C.CASEID = CN1.CASEID AND CN1.NAMETYPE = 'SIG'
LEFT JOIN INPROASIA..NAME N1 ON N1.NAMENO = CN1.NAMENO
LEFT JOIN INPROASIA..CASENAME CN2 ON C.CASEID = CN2.CASEID AND CN2.NAMETYPE = 'EMP'
LEFT JOIN INPROASIA..NAME N2 ON N2.NAMENO = CN2.NAMENO
GROUP BY O.DESCRIPTION, N1.NAMENO, N1.NAMECODE, ISNULL(N1.FIRSTNAME+' ','')+ N1.NAME, N2.NAMENO, N2.NAMECODE, ISNULL(N2.FIRSTNAME+' ','')+ N2.NAME
CREATE VIEW SB_SIGEMP_EU
AS
SELECT O.DESCRIPTION AS OFFICE,
N1.NAMENO AS SIG_NAMENO, N1.NAMECODE AS SIG_NAMECODE, ISNULL(N1.FIRSTNAME+' ','')+ N1.NAME AS SIG_NAME,
N2.NAMENO AS EMP_NAMENO, N2.NAMECODE AS EMP_NAMECODE, ISNULL(N2.FIRSTNAME+' ','')+ N2.NAME AS EMP_NAME, COUNT(C.CASEID) AS CASECOUNT
FROM INPROEU..OFFICE O
LEFT JOIN INPROEU..CASES C ON C.OFFICEID = O.OFFICEID
LEFT JOIN INPROEU..CASENAME CN1 ON C.CASEID = CN1.CASEID AND CN1.NAMETYPE = 'SIG'
LEFT JOIN INPROEU..NAME N1 ON N1.NAMENO = CN1.NAMENO
LEFT JOIN INPROEU..CASENAME CN2 ON C.CASEID = CN2.CASEID AND CN2.NAMETYPE = 'EMP'
LEFT JOIN INPROEU..NAME N2 ON N2.NAMENO = CN2.NAMENO
GROUP BY O.DESCRIPTION, N1.NAMENO, N1.NAMECODE, ISNULL(N1.FIRSTNAME+' ','')+ N1.NAME, N2.NAMENO, N2.NAMECODE, ISNULL(N2.FIRSTNAME+' ','')+ N2.NAME
CREATE VIEW SB_SIGEMP_US
AS
SELECT O.DESCRIPTION AS OFFICE,
N1.NAMENO AS SIG_NAMENO, N1.NAMECODE AS SIG_NAMECODE, ISNULL(N1.FIRSTNAME+' ','')+ N1.NAME AS SIG_NAME,
N2.NAMENO AS EMP_NAMENO, N2.NAMECODE AS EMP_NAMECODE, ISNULL(N2.FIRSTNAME+' ','')+ N2.NAME AS EMP_NAME, COUNT(C.CASEID) AS CASECOUNT
FROM INPROUS..OFFICE O
LEFT JOIN INPROUS..CASES C ON C.OFFICEID = O.OFFICEID
LEFT JOIN INPROUS..CASENAME CN1 ON C.CASEID = CN1.CASEID AND CN1.NAMETYPE = 'SIG'
LEFT JOIN INPROUS..NAME N1 ON N1.NAMENO = CN1.NAMENO
LEFT JOIN INPROUS..CASENAME CN2 ON C.CASEID = CN2.CASEID AND CN2.NAMETYPE = 'EMP'
LEFT JOIN INPROUS..NAME N2 ON N2.NAMENO = CN2.NAMENO
GROUP BY O.DESCRIPTION, N1.NAMENO, N1.NAMECODE, ISNULL(N1.FIRSTNAME+' ','')+ N1.NAME, N2.NAMENO, N2.NAMECODE, ISNULL(N2.FIRSTNAME+' ','')+ N2.NAME
2015年7月28日星期二
Excel VBA - Before Dataimport
Sub RomoveEmptyColumn()
Dim IsEmpty As Boolean
ro = getRowCount(0)
co = getColumnCount(0)
For c = co To 1 Step -1
IsEmpty = True
For r = 2 To ro
'Cells(r, c).Select
If Cells(r, c).Value <> "" Then
IsEmpty = False
r = ro
End If
Next r
If IsEmpty = True Then
Columns(c).Select
Columns(c).Delete
End If
Next c
End Sub
Sub DataTidy()
ro = getRowCount(0)
For r = 2 To ro
Cells(r, 2).Select
Cells(r, 2).Value = "'" & Cells(r, 2).Value
Next
ro = getRowCount(0)
For r = 2 To ro
Cells(r, 2).Value = "'" & Cells(r, 2).Value
Cells(r, 7).Value = "'" & Cells(r, 7).Value
Cells(r, 12).Value = "'" & Cells(r, 12).Value
Cells(r, 13).Value = "'" & Cells(r, 13).Value
Cells(r, 26 + 4).Value = "'" & Cells(r, 26 + 4).Value
Cells(r, 26 + 5).Value = "'" & Cells(r, 26 + 5).Value
Cells(r, 26 + 16).Value = "'" & Cells(r, 26 + 16).Value
Cells(r, 26 + 21).Value = "'" & Cells(r, 26 + 21).Value
Cells(r, 26 + 22).Value = "'" & Cells(r, 26 + 22).Value
Cells(r, 52 + 4).Value = "'" & Cells(r, 52 + 4).Value
Cells(r, 52 + 14).Value = "'" & Cells(r, 52 + 14).Value
Next
End Sub
Dim IsEmpty As Boolean
ro = getRowCount(0)
co = getColumnCount(0)
For c = co To 1 Step -1
IsEmpty = True
For r = 2 To ro
'Cells(r, c).Select
If Cells(r, c).Value <> "" Then
IsEmpty = False
r = ro
End If
Next r
If IsEmpty = True Then
Columns(c).Select
Columns(c).Delete
End If
Next c
End Sub
Sub DataTidy()
ro = getRowCount(0)
For r = 2 To ro
Cells(r, 2).Select
Cells(r, 2).Value = "'" & Cells(r, 2).Value
Next
ro = getRowCount(0)
For r = 2 To ro
Cells(r, 2).Value = "'" & Cells(r, 2).Value
Cells(r, 7).Value = "'" & Cells(r, 7).Value
Cells(r, 12).Value = "'" & Cells(r, 12).Value
Cells(r, 13).Value = "'" & Cells(r, 13).Value
Cells(r, 26 + 4).Value = "'" & Cells(r, 26 + 4).Value
Cells(r, 26 + 5).Value = "'" & Cells(r, 26 + 5).Value
Cells(r, 26 + 16).Value = "'" & Cells(r, 26 + 16).Value
Cells(r, 26 + 21).Value = "'" & Cells(r, 26 + 21).Value
Cells(r, 26 + 22).Value = "'" & Cells(r, 26 + 22).Value
Cells(r, 52 + 4).Value = "'" & Cells(r, 52 + 4).Value
Cells(r, 52 + 14).Value = "'" & Cells(r, 52 + 14).Value
Next
End Sub
2015年7月15日星期三
T-SQL : u_KillAllTasks
USE [ToolBox]
GO
/****** Object: StoredProcedure [dbo].[u_KillAllTasks] Script Date: 07/15/2015 15:39:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[u_KillAllTasks]
( @Database nvarchar(200))
AS
BEGIN
SET @Database = REPLACE (@Database, ' ','')
SET @Database = ''''+REPLACE (@Database, ',',''',''')+''''
DECLARE @SCRIPT NVARCHAR(MAX);
DECLARE @spid INT;
DECLARE MyCursor CURSOR FOR
SELECT P.spid FROM SYS.sysprocesses P JOIN SYS.databases D ON P.dbid = D.database_id
WHERE D.name NOT IN ('MASTER','MODEL','MSDB','TEMPDB') AND P.spid <> @@SPID
--WHERE D.name IN (@Database)
--PRINT @Database
OPEN MyCursor;
-- Perform the first fetch and store the values in variables.
-- Note: The variables are in the same order as the columns
-- in the SELECT statement.
FETCH NEXT FROM MyCursor
INTO @spid;
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
-- Concatenate and display the current values in the variables.
SET @SCRIPT = 'KILL '+ LTRIM(STR(@spid))
PRINT @SCRIPT
EXEC ( @SCRIPT )
-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM MyCursor
INTO @spid;
END
CLOSE MyCursor;
DEALLOCATE MyCursor;
----------------------------------------------------------------
-- EXEC DBO.U_KillAllTasks @DATABASE='INPROUS, INPROEU, TOOLBOX'
END
GO
/****** Object: StoredProcedure [dbo].[u_KillAllTasks] Script Date: 07/15/2015 15:39:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[u_KillAllTasks]
( @Database nvarchar(200))
AS
BEGIN
SET @Database = REPLACE (@Database, ' ','')
SET @Database = ''''+REPLACE (@Database, ',',''',''')+''''
DECLARE @SCRIPT NVARCHAR(MAX);
DECLARE @spid INT;
DECLARE MyCursor CURSOR FOR
SELECT P.spid FROM SYS.sysprocesses P JOIN SYS.databases D ON P.dbid = D.database_id
WHERE D.name NOT IN ('MASTER','MODEL','MSDB','TEMPDB') AND P.spid <> @@SPID
--WHERE D.name IN (@Database)
--PRINT @Database
OPEN MyCursor;
-- Perform the first fetch and store the values in variables.
-- Note: The variables are in the same order as the columns
-- in the SELECT statement.
FETCH NEXT FROM MyCursor
INTO @spid;
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
-- Concatenate and display the current values in the variables.
SET @SCRIPT = 'KILL '+ LTRIM(STR(@spid))
PRINT @SCRIPT
EXEC ( @SCRIPT )
-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM MyCursor
INTO @spid;
END
CLOSE MyCursor;
DEALLOCATE MyCursor;
----------------------------------------------------------------
-- EXEC DBO.U_KillAllTasks @DATABASE='INPROUS, INPROEU, TOOLBOX'
END
TSQL - Shrink Files
-- SELECT name, database_id FROM SYS.databases WHERE name NOT IN ('master','tempdb','model','msdb','RSDB','RSDBTempDB')
--------------------------------------------------------------------------------------------------------------------------------
USE MASTER
GO
-- Declare the variables to store the values returned by FETCH.
DECLARE @DATABASE Nvarchar(100), @DBID INT, @FILENAME NVARCHAR(200), @SCRIPT NVARCHAR(MAX);
DECLARE DBCursor CURSOR FOR
SELECT D.NAME, D.database_id, F.NAME FROM SYS.databases D JOIN sys.master_files F ON D.database_id = F.database_id
WHERE F.TYPE_DESC = 'LOG' AND D.name NOT IN ('master','tempdb','model','msdb','RSDB','RSDBTempDB','ReportServer$TOKYO2','ReportServer$TOKYO2TempDB')
ORDER BY 1;
OPEN DBCursor;
FETCH NEXT FROM DBCursor
INTO @DATABASE, @DBID, @FILENAME;
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
-- Concatenate and display the current values in the variables.
SET @Database = '['+@Database+']'
-- 1.
SET @SCRIPT ='ALTER DATABASE ' +@Database+ ' SET RECOVERY SIMPLE'
PRINT @SCRIPT
EXECUTE sp_executesql @SCRIPT, N'@Database nvarchar(100)', @Database
-- 2.
--SELECT @FILENAME = name FROM sys.master_files WHERE database_id = db_id(@DATABASE) AND type = 1
-- PRINT '.....................' + @FILENAME + '.....................'
SET @SCRIPT = 'USE ' +@DATABASE+ ';'+
'DBCC SHRINKFILE ('+@FILENAME+', 1)'
PRINT @SCRIPT
EXECUTE sp_executesql @SCRIPT, N'@Database nvarchar(100)', @Database
-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM DBCursor
INTO @DATABASE, @DBID, @FILENAME;
END
CLOSE DBCursor;
DEALLOCATE DBCursor;
GO
--------------------------------------------------------------------------------------------------------------------------------
USE MASTER
GO
-- Declare the variables to store the values returned by FETCH.
DECLARE @DATABASE Nvarchar(100), @DBID INT, @FILENAME NVARCHAR(200), @SCRIPT NVARCHAR(MAX);
DECLARE DBCursor CURSOR FOR
SELECT D.NAME, D.database_id, F.NAME FROM SYS.databases D JOIN sys.master_files F ON D.database_id = F.database_id
WHERE F.TYPE_DESC = 'LOG' AND D.name NOT IN ('master','tempdb','model','msdb','RSDB','RSDBTempDB','ReportServer$TOKYO2','ReportServer$TOKYO2TempDB')
ORDER BY 1;
OPEN DBCursor;
FETCH NEXT FROM DBCursor
INTO @DATABASE, @DBID, @FILENAME;
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
-- Concatenate and display the current values in the variables.
SET @Database = '['+@Database+']'
-- 1.
SET @SCRIPT ='ALTER DATABASE ' +@Database+ ' SET RECOVERY SIMPLE'
PRINT @SCRIPT
EXECUTE sp_executesql @SCRIPT, N'@Database nvarchar(100)', @Database
-- 2.
--SELECT @FILENAME = name FROM sys.master_files WHERE database_id = db_id(@DATABASE) AND type = 1
-- PRINT '.....................' + @FILENAME + '.....................'
SET @SCRIPT = 'USE ' +@DATABASE+ ';'+
'DBCC SHRINKFILE ('+@FILENAME+', 1)'
PRINT @SCRIPT
EXECUTE sp_executesql @SCRIPT, N'@Database nvarchar(100)', @Database
-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM DBCursor
INTO @DATABASE, @DBID, @FILENAME;
END
CLOSE DBCursor;
DEALLOCATE DBCursor;
GO
2015年7月13日星期一
Excel VBA - Layout formatting for an exported excel worksheet
Sub main()
Dim TheRange As Range
ro = getRowCount(1)
co = getColumnCount(1)
Range(Cells(1, 1), Cells(ro, co)).Select
Range(Cells(1, 1), Cells(ro, co)).VerticalAlignment = xlTop
Range(Cells(1, 1), Cells(ro, co)).WrapText = True
Range(Cells(1, 1), Cells(ro, co)).Font.Size = 8
' Set margin if need printing
With ActiveSheet.PageSetup
.LeftMargin = Application.InchesToPoints(0.5)
.RightMargin = Application.InchesToPoints(0.5)
.TopMargin = Application.InchesToPoints(0.5)
.BottomMargin = Application.InchesToPoints(0.5)
.HeaderMargin = Application.InchesToPoints(0.2)
.FooterMargin = Application.InchesToPoints(0.2)
.Orientation = xlLandscape
.PaperSize = xlPaperA4
.PrintTitleRows = ActiveSheet.Rows(1).Address
'.Zoom = False
'.FitToPagesWide = 1
'.FitToPagesTall = 1
End With
ActiveSheet.DisplayPageBreaks = False
' Design as table
Dim lstList As ListObject
For Each lstList In ActiveSheet.ListObjects
If lstList.Name = "Table1" Then
ActiveSheet.ListObjects("Table1").Unlist
Exit For
End If
Next
Range(Cells(1, 1), Cells(ro, co)).Select
ActiveSheet.ListObjects.Add(xlSrcRange, Selection, , xlYes).Name = "Table1"
ActiveSheet.ListObjects("Table1").TableStyle = "TableStyleLight9"
' Set Width
Range(Cells(1, 1), Cells(ro, co)).Columns.AutoFit
For c = 1 To co
Columns(c).Select
If Columns(c).ColumnWidth > 15 Then
Columns(c).ColumnWidth = 15
If Cells(1, c).Value = "Goods and Services" Then Columns(c).ColumnWidth = 45
End If
Next c
Cells(1, 1).Select
End Sub
Public Function getRowCount(sheet As Variant) As Integer
If sheet = 0 Then
getRowCount = ActiveSheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Else
getRowCount = Sheets(sheet).Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
End If
End Function
Public Function getColumnCount(sheet As Variant) As Integer
If sheet = 0 Then
getColumnCount = ActiveSheet.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
Else
getColumnCount = Sheets(sheet).Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
End If
End Function
Dim TheRange As Range
ro = getRowCount(1)
co = getColumnCount(1)
Range(Cells(1, 1), Cells(ro, co)).Select
Range(Cells(1, 1), Cells(ro, co)).VerticalAlignment = xlTop
Range(Cells(1, 1), Cells(ro, co)).WrapText = True
Range(Cells(1, 1), Cells(ro, co)).Font.Size = 8
' Set margin if need printing
With ActiveSheet.PageSetup
.LeftMargin = Application.InchesToPoints(0.5)
.RightMargin = Application.InchesToPoints(0.5)
.TopMargin = Application.InchesToPoints(0.5)
.BottomMargin = Application.InchesToPoints(0.5)
.HeaderMargin = Application.InchesToPoints(0.2)
.FooterMargin = Application.InchesToPoints(0.2)
.Orientation = xlLandscape
.PaperSize = xlPaperA4
.PrintTitleRows = ActiveSheet.Rows(1).Address
'.Zoom = False
'.FitToPagesWide = 1
'.FitToPagesTall = 1
End With
ActiveSheet.DisplayPageBreaks = False
' Design as table
Dim lstList As ListObject
For Each lstList In ActiveSheet.ListObjects
If lstList.Name = "Table1" Then
ActiveSheet.ListObjects("Table1").Unlist
Exit For
End If
Next
Range(Cells(1, 1), Cells(ro, co)).Select
ActiveSheet.ListObjects.Add(xlSrcRange, Selection, , xlYes).Name = "Table1"
ActiveSheet.ListObjects("Table1").TableStyle = "TableStyleLight9"
' Set Width
Range(Cells(1, 1), Cells(ro, co)).Columns.AutoFit
For c = 1 To co
Columns(c).Select
If Columns(c).ColumnWidth > 15 Then
Columns(c).ColumnWidth = 15
If Cells(1, c).Value = "Goods and Services" Then Columns(c).ColumnWidth = 45
End If
Next c
Cells(1, 1).Select
End Sub
Public Function getRowCount(sheet As Variant) As Integer
If sheet = 0 Then
getRowCount = ActiveSheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Else
getRowCount = Sheets(sheet).Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
End If
End Function
Public Function getColumnCount(sheet As Variant) As Integer
If sheet = 0 Then
getColumnCount = ActiveSheet.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
Else
getColumnCount = Sheets(sheet).Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
End If
End Function
2015年7月9日星期四
Work VBA - Do Something on all TextBox
Word VBA, Do something on all TexBox
Dim oShp As Word.Shape
Dim i As Long
x = ActiveDocument.Shapes.Count
For i = 1 To x
Set oShp = ActiveDocument.Shapes(i)
If oShp.Type = msoTextBox Then
oShp.Select
' Do Somethinng
End If
Next i
訂閱:
文章 (Atom)